中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中的并發是什么

發布時間:2020-06-10 19:20:22 來源:億速云 閱讀:270 作者:鴿子 欄目:編程語言

并發是什么?

并發:是指在某個時間段內,多任務交替的執行任務。當有多個線程在操作時,把CPU運行時間劃分成若干個時間段,再將時間段分配給各個線程執行。 在一個時間段的線程代碼運行時,其它線程處于掛起狀。

在并發環境下,程序的封閉性被打破,出現以下特點:

● 并發程序之間有相互制約的關系。直接制約體現為一個程序需要另一個程序的計算結果;間接體現為多個程序競爭共享資源,如處理器、緩沖區等。

● 并發程序的執行過程是斷斷續續的。程序需要記憶現場指令及執行點。

● 當并發數設置合理并且CPU擁有足夠的處理能力時,并發會提高程序的運行效率。

在并發環境中,當一個對象可以被多個線程訪問到時,會造成該對象可以被任何訪問到的線程進行修改,從而出現數據不一致的情況。所以提出線程安全的概念。

并發和并行

是十分容易混淆的概念。并發指的是多個任務交替進行,而并行則是指真正意義上的“同時進行”。實際上,如果系統內只有一個CPU,使用多線程時,在真實系統環境下不能并行,只能通過切換時間片的方式交替進行,從而并發執行任務。真正的并行只能出現在擁有多個CPU的系統中。


為什么要用到并發?

并發編程在一定程度上離不開多核CPU的發展。隨著單核CPU的研發已經不能遵循“摩爾定律”(摩爾定律是硬件發展的觀測定律,另外還有基于“摩爾定律”的“反摩爾定律”,不過“反摩爾定律”是軟件領域的定律,有興趣的可以自行了解),硬件工程師們為了進一步提升計算速度,而不是再追求單獨的計算單元,而是將多個計算單元整合到了一起,也就是形成了多核CPU。短短十幾年的時間,家用型CPU,比如Intel i7就可以達到4核心甚至8核心。而專業服務器則通常可以達到幾個獨立的CPU,每一個CPU甚至擁有多達8個以上的內核。

因此,“摩爾定律”似乎在CPU核心擴展上繼續得到體驗。而在多核的CPU的背景下,催生了并發編程的趨勢,通并發編程的形式可以將多核CPU的計算能力發揮到極致,性能得到提升。

在特殊的業務場景下先天的就適合于并發編程。比如在圖像處理領域,一張1024X768像素的圖片,包含達到78萬6千多個像素。即時將所有的像素遍歷一邊都需要很長的時間,面對如此復雜的計算量就需要充分利用多核的計算的能力。

另外在開發購物平臺時,為了提升響應速度,需要拆分,減庫存,生成訂單等等這些操作,就可以進行拆分利用多線程的技術完成。面對復雜業務模型,并行程序會比串行程序更適應業務需求,而并發編程吻合更能這種業務拆分正是因為這些優點,使得多線程技術能夠得到重視,也是一名CS學習者應該掌握的:

● 充分利用多核CPU的計算能力;

● 方便進行業務拆分,提升應用性能

并發編程有哪些缺點?

1、頻繁的上下文切換

時間片是CPU分配給各個線程的時間,因為時間非常短,所以CPU不斷通過切換線程,讓我們覺得多個線程是同時執行的,時間片一般是幾十毫秒。

每次切換時,需要把當前的狀態保存起來,以便能夠進行恢復先前狀態,而這個切換行為非常損耗性能,過于頻繁切換反而無法發揮出多線程編程的優勢。通常減少上下文切換可以采用無鎖并發編程、 CAS算法、使用最少的線程和使用協程。

無鎖并發編程:可以參照的ConcurrentHashMap鎖分段的思想,不同的線程處理不同段的數據,這樣在多線程競爭的條件下,可以減少上下文切換的時間。

CAS算法,利用原子下使用CAS算法來更新數據,使用了樂觀鎖,可以有效的減少一部分不必要的鎖競爭帶來的上下文切換

使用最少線程:避免創建不需要的線程,比如任務很少,但是創建了很多的線程,這樣會造成大量的線程都處于等待狀態

協程:在單線程里實現多任務的調度,并在單線程里維持多個任務間的切換

由于上下文切換是個相對比較耗時的操作,所以在 “Java的并發編程的藝術” 一書中有過一個實驗,并發累加未必會比串行累加速度快。

2、線程的安全性問題

多線程編程中最難以把握的就是臨界區線程安全問題,稍微不注意就會出現死鎖的情況,一旦產生死鎖就會造成系統功能不可用。

以上就是java并發是什么?的詳細內容,更多請關注億速云其它相關文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌鲁木齐县| 宣化县| 阆中市| 沅陵县| 汉源县| 慈利县| 忻州市| 乌兰县| 龙南县| 收藏| 廉江市| 台湾省| 惠来县| 开江县| 定日县| 崇文区| 土默特左旗| 绵阳市| 彩票| 双江| 浮山县| 新竹县| 托里县| 广西| 延川县| 巫山县| 龙里县| 荃湾区| 萨迦县| 上林县| 朝阳市| 秀山| 百色市| 漠河县| 财经| 杂多县| 万安县| 太保市| 江山市| 思南县| 敖汉旗|