fork并發編程 大家都說java不好學,到底難在哪呢?
大家都說java不好學,到底難在哪呢?我覺得JAVA的難點在于廣度!大家都知道JAVA入門很容易。通過學習基本類型、基本操作、面向對象的思維和IO,就可以開發大部分JAVA程序!那為什么難呢?以多線程
大家都說java不好學,到底難在哪呢?
我覺得JAVA的難點在于廣度!
大家都知道JAVA入門很容易。通過學習基本類型、基本操作、面向對象的思維和IO,就可以開發大部分JAVA程序!
那為什么難呢?以多線程為例,多線程可以通過簡單的實現一個線程或者一個真正的Runnble接口來實現,但是我怕你誤用線程造成性能問題,所以我給你一個完整的線程池來實現線程復用,但是線程池的創建有幾種類型:singleton,動態,周期性任務執行!
而且用了多線程之后,因為線程共享資源,所以會有wire安全問題吧?我們做什么呢鎖,同步鎖,鎖方法,鎖對象,鎖代碼段,鎖被鎖,不得不說性能不好。做一個CAS和AQS實現重入鎖!
這時,傲慢的人來了,說他沒有 我不想鎖它。我該怎么辦?ThreadLocal給你每個線程一個變量好嗎?所以數據不會互相影響!用BlockingQueue逐個處理總行吧!
多線程里還有CountDownBatch,valetile,parallel computing,FutrueTask,Forkjoin,都不是省油的燈!
上面說的多線程只是J.U.C包下的冰山一角,多線程只是JAVA下的冰山一角!
而且,JAVA開發最難的不僅僅是JAVA語言,還有JAVA生態。從事JAVA的人都知道以下幾點:
搜索引擎有lucence,solr和elasticSearch!
數據庫里有hibernate,mybatis,mycat,druid,canel!
緩存里有redis,memcache,ehcache!
消息中間件包括redis,activ
c 如何并行編程?
1.c沒有專門的并行編程模式,但是可以多線程多進程模擬。2.例如,在linux下,可以使用fork函數來調用一個新進程。分叉函數是計算機程序設計中的分叉函數。返回值:成功調用一次,返回兩個值,子進程返回0,父進程返回子進程標志;否則,錯誤返回-1。fork函數將正在運行的程序分成兩個(幾乎)相同的進程,每個進程進入過程啟動一個線程,該線程從代碼中的相同位置開始執行。這兩個進程中的線程繼續執行,就好像兩個用戶同時啟動了應用程序的兩個副本。函數原型pid_t fork( void) (pid_t是一個宏定義,本質是在# incultsys/types . HGT中定義了int)返回值:如果成功調用一次,則返回兩個值,子進程返回0,父進程返回子進程ID;否則,錯誤返回到-1函數,表明現有的進程可以調用fork函數來創建新的進程。fork創建的新進程稱為子進程。fork函數被調用了一次,但返回了兩次。兩次返回的唯一區別是子進程返回值0,而父進程返回子進程ID。子進程是父進程的副本,它將獲得父進程的數據空間、堆、棧等資源的副本。注意,子進程持有一個 "復制 "的存儲空間,這意味著父進程和子進程不共享這些存儲空間。UNIX會把父進程地址空間的內容復制到子進程,所以子進程有一個獨立的地址空間。在不同的UNIX (Like)系統下,無法確定fork之后是先運行子進程還是先運行父進程,這取決于系統的實現。所以你不應該。;移植代碼時不要做任何假設。