国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

并發編程的挑戰(一)

2019-11-11 06:51:53
字體:
來源:轉載
供稿:網友

1.1 上下文切換

       即使是單核處理器也支持多線程執行代碼,CPU通過給每個線程分配CPU時間片來實現這個機制。時間片是CPU分配給每個線程的時間,因為時間片非常短,說以CPU通過不停地切換線程執行,讓我們感覺多個線程是同時執行的,時間片一般是幾十毫秒(ms)。       CPU通過時間片分配算法來循環執行任務,當前任務執行一個時間片后會切換到下一個任務。但是,在切換前會保存上一個任務的狀態,以便下次切換回這個任務時,可以再加載這個任務的狀態。所以任務從保存到加載的過程就是一次上下文切換。       上下文切換會影響多線程的執行速度,因為線程有創建上下文切換的開銷,所以當線程過多時速度不一定比線程少時執行更快。

1.1.1 如何減少上下文切換

        減少上下文切換的方法有:無鎖并發編程、CAS算法、使用最少線程和使用協程。       無鎖并發編程:多線程競爭鎖時,會引起上下文切換,所以多線程處理數據時,可以用一些辦法來避免使用鎖,如將數據的ID按照Hash算法取模分段,不同的線程處理不同段的數據。       CAS算法java的Atomic包使用CAS算法來更新數據,而不需要加鎖。       使用最少線程:避免創建不需要的線程。       協程:在單線程里實現多任務的調度,并在單線程里維持多個任務間的切換。

1.2 死鎖

       避免死鎖的幾個常見。       避免一個線程同時獲取多個鎖。       避免一個線程在鎖內同時占用多個資源,盡量保證每個鎖只占用一個資源。       對于數據庫鎖,加鎖和解鎖必須在一個數據庫連接里,否則會出現解鎖失敗的情況。

1.3 資源限制的挑戰

1.3.1 什么是資源限制

       就是在并發編程時,程序的執行速度受限于計算機資源或軟件資源。

1.3.2 資源限制引發的問題

         并發編程中,將代碼執行速度加快的原則是將代碼中串行執行部分編程并發執行。

1.3.3 如何解決資源限制的問題

       對于硬件資源限制,可以考慮使用集群并行執行程序。

       對于軟件資源限制,可以考慮使用資源池復用。比如使用連接池將數據庫和Socket連接復用,或者在調用對方webservice接口獲取數據是,只建立一個連接。

1.3.4 在資源限制情況下進行并發編程

       根據不同的資源限制調整程序的并發度,比如下載文件程序依賴兩個資源:帶寬和硬盤讀寫速度。有數據庫操作時,涉及數據庫連接數,如果SQL語句執行非常快,而線程的數量比數據庫連接數大很多,則某些線程會被阻塞,等待數據庫連接。


上一篇:LeetCode 344. Reverse String

下一篇:unsafe 包

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通辽市| 临清市| 嘉义市| 布尔津县| 紫金县| 衡南县| 普安县| 金溪县| 确山县| 治多县| 浦东新区| 绩溪县| 汨罗市| 庆安县| 曲沃县| 丰县| 酒泉市| 镇康县| 方正县| 青川县| 满洲里市| 富源县| 阿荣旗| 富川| 二手房| 民县| 龙山县| 固原市| 平远县| 城口县| 扎兰屯市| 漳州市| 石狮市| 房产| 定陶县| 新源县| 泗水县| 常德市| 北海市| 洮南市| 民勤县|