国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

java-實戰java高并發程序設計-ch1走入并行的世界

suxier / 2166人閱讀

摘要:參考何去何從的并行計算忘記該死的并行并行程序的復雜性和亂序性,并行程序設計十分復雜。可怕的現實摩爾定律的失效單核上的晶體管數目達到極限。并發級別阻塞重入鎖無饑餓兩個線程優先級不同,低優先級的可能產生饑餓。

Chapter1

參考:
https://github.com/chengbingh...

1.1何去何從的并行計算

1.1.1 忘記該死的并行
并行程序的復雜性和亂序性,并行程序設計十分復雜。
linus:并行程序有兩個應用場景
一個是圖形處理領域,比如一個1000萬像素的圖片,用for循環遍歷十分耗時。
一個是服務端編程,比如淘寶雙十一

并行程序的使用的兩個考量:
一個是功能上的,比如jvm 除了main線程還有jit即時編譯,gc垃圾回收線程,業務模型的需要,需要多個執行實體。
一個是性能上,獲得更好的性能。

1.1.2可怕的現實:摩爾定律的失效
單核cpu, 上的晶體管數目達到極限。

1.1.3 柳暗花明:不斷前進
單核cpu===>多核cpu

1.1.4 光明或黑暗
唐納德:摩爾定律的維持由硬件工程師維持,變成軟件工程師來維持。

1.2 必須知道的概念

1.2.1 同步異步
可以理解為,同步,一次方法調用,會等到返回結果了再繼續執行,異步是方法調用后立即返回。

1.2.2 并發&并行
并發的最終效果和并行可能一樣,區別在于,單核cpu,一次只能執行一個指令,只能是并發。
1.2.3臨界區

在并行計算中,臨界區的資源是保護對象,避免
1.2.4阻塞和非阻塞

同步和異步,阻塞和非阻塞區別

1.2.5 死鎖、饑餓、活鎖
死鎖
synchronized 嵌套
lock 不釋放鎖
饑餓
一個線程無法獲取資源,而一直無法執行。(比如線程優先級比較低)
活鎖
兩個線程,都將資源讓給對方,此時,資源在線程間讓來讓去,那么兩個線程都無法執行。

1.3并發級別

1.3.1 阻塞
synchronized
重入鎖
1.3.2 無饑餓
兩個線程優先級不同,低優先級的可能產生饑餓。
1.3.3無障礙
無障礙是大家都隨意操作資源,一旦發現同時操作某個資源了,那么就回滾。 這個相對于悲觀的阻塞,這個是樂觀策略

1.3.3 無鎖
不斷嘗試修改資源,可能無限循環,直到嘗試修改資源成功

1.3.4 無等待

1.4 并行的兩個定律

隨著cpu 個數提高,我們可以不斷提高運行速度,但是還是有限制的。

1.5 java 內存模型(JMM)

1.5.1 原子性
原子性指的是一個操作在執行過程中不能被中斷。
中斷的例子:在一個32位的虛擬機中, 每次從內存中操作的大小都是32位的, 現在兩個線程同時給一個64為的long型變量賦值。 一個賦值為1億,一個賦值為2億, 最終賦值的結果可能既不是1億,也不是2億。而是一個莫名其妙的數字。
valiate 關鍵字可以避免這個情況

1.5.2 可見性
一個線程修改了共享變量的值,其它的線程能否立知道這個改變。
cpu優化:
并發情況下, 可能是一個cpu1 修改一個變量后,將它放到緩存cache中,這時另外一cpu2中的線程修改了這個共享變量,它也放到緩存中cache中, 這樣cpu1里的線程由于還是從緩存中取,所以不知道這個修改。
硬件優化
有些內存讀寫會放到一個硬件的隊列中,不會立即操作。
指令重排
1.5.3 有序性
處理器cpu 出現指令重排
常見的Java運行時環境的JIT編譯器也會做指令重排序,即生成的機器指令與字節碼指令順序不一致。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71271.html

相關文章

  • 走入并行世界

    摘要:無鎖無鎖的并行都是無障礙的,但不同的是無鎖的并發保證了必然有一個線程能夠在有限步驟內離開臨界區。有關并行的兩個重要定律未完待續實戰高并發程序設計第一章走入并行世界讀書筆記歡迎加入咖啡館的春天。 必須知道的幾個概念 同步(Synchronous)和異步(Asynchronous) 同步方法調用一旦開始,調用者必須等待方法調用返回后才能繼續后續行為。異步方法調用更像一個消息傳遞,一旦開始就...

    Coding01 評論0 收藏0
  • Java并發程序設計》讀書筆記 第一章 走入并行世界

    showImg(https://segmentfault.com/img/bVbeIZ4?w=1949&h=1315);

    paraller 評論0 收藏0
  • java并發編程學習---之一

    摘要:開始學習也有一段時間了,一些基礎的書也掃了一遍了。最近慢慢開始看和,后者的話和有類似之處,都是一些編程經驗的編程的世界里好多的東西都是相同的。這里其實是對的最佳實踐,之后該對象已經變成一個過期的引用了,此時就應該清空這個引用。 開始學習java也有一段時間了,一些基礎的書也掃了一遍了(think in java/core java volume 1)。最近慢慢開始看和,后者的話和有類似...

    chavesgu 評論0 收藏0
  • java-實戰java并發程序設計-ch2java并行程序基礎

    摘要:所以需要等來確保程序中隱蔽的錯誤沒有提示的錯誤比如兩個正數相加,溢出導致其值為負數。并發下的兩個線程同時對一個對象,每個線程個對象,最終結果可能中有萬個對象。可能對象個數少于萬可能內部結構發生破壞,程序無法終止,會被大量消耗。 java并行程序基礎 參考:https://github.com/chengbingh... 2.1 有關線程, 需要知道的事 進程是線程的容器線程狀態圖: s...

    yy13818512006 評論0 收藏0
  • 如何提Java并行程序性能

    摘要:因此將變量存放于獨立的緩存行中,也有助于變量在多線程訪問是的性能提升實戰高并發程序設計,大量的高并發庫都會采用這種技術。 在Java程序中,多線程幾乎已經無處不在。與單線程相比,多線程程序的設計和實現略微困難,但通過多線程,我們卻可以獲得多核CPU帶來的性能飛躍,從這個角度說,多線程是一種值得嘗試的技術。那么如何寫出高效的多線程程序呢? 有關多線程的誤區:線程越多,性能越好 不少初學者...

    everfight 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<