国产探花免费观看_亚洲丰满少妇自慰呻吟_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 包

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 禄丰县| 大石桥市| 武汉市| 兖州市| 双桥区| 东阳市| 许昌市| 墨江| 海盐县| 道真| 柏乡县| 分宜县| 武隆县| 囊谦县| 扶余县| 秀山| 湟源县| 满洲里市| 梅州市| 蓬莱市| 瑞金市| 金昌市| 茶陵县| 砀山县| 崇仁县| 枣庄市| 天气| 唐河县| 石嘴山市| 榆社县| 平武县| 车致| 芜湖市| 邹平县| 昭通市| 桃园市| 刚察县| 浦东新区| 琼中| 集贤县| 德昌县|