成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

并發編程中需要謹記的規則

開發 后端 架構
本文介紹了在并發編程中更需要緊急的一些規則,本文為翻譯文章,詳細請看下文

最小化臨界區

Amdahl定律和Gustafson定律都將并行算法中的順序執行的工作視為性能問題的頭號敵人。兩個執行代碼區段中間的時間需要順序執行,這就是眾所周知的臨界值。在圖1-16的分析Gustafson定律的圖表中有四個這樣的臨界區。

圖 1-16

當你并行化你的任務的時候,為了實現最好的性能我們需要最小化這些臨界區。大多的時候,是難以避免并行執行區域之間的串行執行的代碼的,因為需要加載并行任務和收集執行結果。然而,優化這些臨界區域的代碼并且移除不必要的代碼比協調并行代碼甚至更重要。

當你面對一個擁有太多臨街區域的執行計劃的時候,要謹記Amdahl定律。如果你不能減少這些區域,那就盡力找到可以與這些區域并行執行的任務。例如,你可以提前取出要同時執行的并行代碼需要的數據來提高解決方案的性能。謹記現在多核硬件提供的能力并避免總是想著你僅有一個執行單元。

理解多核并發編程的規則

James Reinders在Dr.Dobb’sJournal上發表了題為“多核并發編程的規則”的文章。他列舉了八條規則來幫助開發人員進行多核編程。他的規則對使用C#和.NET 4編寫的并行應用程序一樣很有用。這些規則的描述如下

1.      并發編程的思想—這條規則就是要謹記并發編程思想進行設計,就像前邊章節所提交的。

2.      面向抽象編程-你可以利用.NET4中的TPL提供的新特性使你的高層代碼反映解決的問題,并且不是底層線程管理技術復雜化。第二章將會引入TPL。

3.      基于任務模型編程,而不是線程—TPL允許你你編寫代碼實現基于任務模型的設計而不用擔心底層的線程。

4.      設計可以選擇關閉并發—當你使用TPL寫代碼的時候,這些代碼頁可能會運行在單核的微處理器上。

5.      避免使用鎖—利用新的類和方法、結構體解決對于復雜同步方式的需求是很重要的。TPL使避免在很多復雜的情景下使用重量級鎖變得更簡單,它提供了新的輕量級的同步方法。

6.      借助已有的工具和類庫的幫助進行并發編程—Visual Studio 2010提供了新的工具調試、測試、協調并行代碼。在本書中你將會學習很多相關的工具和類庫。

7.      使用可伸縮的內存分配策略—TPL在CLR里提供了可伸縮的內存分配策略,當任務和線程執行的時候,它會自動的執行內存分配策略。然而,為了最大程度的利用緩存,你必須分析不同的分配可能性,并且盡力避免在每個任務里消耗過多的內存。

8.      設計的可伸縮性可以通過增加負載的方式實現—一旦你精通了并行擴展庫,那么使用TPL提供的新的類考慮Gustafson定律就會很容易。如果你的設計需要具有很強的伸縮性,你將可以編寫代碼根據核心的增加進行調整。Windows 7 和windows Server 2008 R2支持多大256個硬件線程或者邏輯處理器;所以,有足夠的伸縮性空間。

為NUMA和更好伸縮性進行設計

近年來,對多處理器支持的最廣泛的模型是NUMA(non-uniform memory access)架構,而不是SMP(symmetricmultiprocessor)架構。SMP的一個最大的問題就是處理器總線會成為將來可伸縮性的瓶頸,因為每個處理器都擁有等同的能力方位內存和io。

使用NUMA,于離得比較遠的內存相比,每個處理器總是可以更快的訪問離自己近的內存。當處理器的數目超過四個的時候,NUMA提供了更好的伸縮性。在windows的 scale-up-technology中,NUMA是以一下方式進行組織的,如圖1-17

一個單個的電腦或者機器可以有一個或者多個group。

每一個group有一個或者多個NUMA節點。

每個NUMA節點有一個或者多個物理處理器。

每個處理器有一個或者多個物理核心,因為它經常是多核處理器。

每個物理內核可以提供一個或者多個邏輯處理器或者硬件線程。

圖1-17

圖1-18展示了由兩個NUMA節點構成一個group的計算機。每個NUMA節點有兩個共享訪問局部內存和io的兩個處理器組成。如果NUMA節點0的處理器0的物理核心0的線程需要訪問位于NUMA節點1的數據,則它必須使用兩個NUMA節點之間的共享總線,這會比直接訪問自己的局部內存要慢很多。

圖 1-18

帶有NUMA的計算機擁有多于一個的系統總線。每個特定的處理器集合使用自己可用的系統總線。同樣的他們也訪問自己自由的內存和io通道。就像前邊描述的,他們可以使用合適的協調策略,使他們具有訪問其他處理器的內存的能力。然而,很明顯訪問其他NUMA節點所有的內存要比方位自己NUMA節點內的付出的代價昂貴的多。

NUMA的硬件需要特殊的優化。應用程序必須知道NUMA硬件和配置。我們可以執行那些需要訪問NUMA節點的相同的內存的任務和線程模型。應用程序應該避免無效的內存方位,并且他們喜歡并發,考慮到內存的未知。

原文鏈接:http://blog.csdn.net/hou478410969/article/details/7661487

責任編輯:林師授 來源: hou478410969的博客
相關推薦

2012-04-01 11:16:47

2019-09-16 08:45:53

并發編程通信

2021-03-23 14:42:34

編程開發代碼

2020-01-14 11:17:33

Go并發Linux

2018-09-12 15:38:42

Javaatomic編程

2012-03-29 09:36:17

2024-10-14 09:58:06

并發編程共享

2024-01-29 10:34:37

Java編程

2022-03-02 08:20:54

并發編程java后端開發

2024-10-18 11:29:15

2009-06-30 10:10:15

Namespace用法Flex

2024-03-04 11:17:25

2023-07-03 09:59:00

并發編程并發容器

2015-03-16 09:08:48

編程教訓金典老者教訓

2009-04-09 09:19:25

C#規則表達式.NET

2023-09-27 09:00:02

SpringBoot并發編程

2010-10-14 10:43:43

編程

2025-06-17 09:32:15

2023-05-22 09:27:11

GMPGolang

2023-08-21 07:34:37

GolangGMP
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本精品久久久久 | 99精品国产一区二区三区 | 精品亚洲视频在线 | 99久久免费精品国产男女高不卡 | 欧美一区二区三区在线观看 | 毛片免费观看视频 | 久久久久久久久久影视 | 亚洲一区二区三区久久久 | 久久亚洲一区二区 | 在线成人 | 一二三四在线视频观看社区 | 日本成人中文字幕 | 国产视频精品免费 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 国产清纯白嫩初高生视频在线观看 | 久久久久久电影 | 国产午夜精品一区二区三区四区 | 日韩成人免费 | 成人欧美一区二区三区在线播放 | 免费xxxx大片国产在线 | 亚洲成人免费视频在线观看 | 欧美一区二区三区国产精品 | av免费网站在线观看 | 久久久精品在线 | 国产精品自产av一区二区三区 | 中国美女av| 人人鲁人人莫人人爱精品 | 在线一区视频 | 精品成人一区二区 | 在线观看黄色 | 久久国产激情视频 | 欧美激情亚洲激情 | 国产欧美日韩一区二区三区在线观看 | 一区二区三区精品视频 | 国产精品久久久一区二区三区 | 亚洲男人网 | 日韩国产在线 | 精品一区二区久久 | 久久一二 | 99久久久久久| 国产一级一级毛片 |