偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

并發(fā)編程中需要謹(jǐn)記的規(guī)則

開發(fā) 后端 架構(gòu)
本文介紹了在并發(fā)編程中更需要緊急的一些規(guī)則,本文為翻譯文章,詳細(xì)請(qǐng)看下文

最小化臨界區(qū)

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

圖 1-16

當(dāng)你并行化你的任務(wù)的時(shí)候,為了實(shí)現(xiàn)最好的性能我們需要最小化這些臨界區(qū)。大多的時(shí)候,是難以避免并行執(zhí)行區(qū)域之間的串行執(zhí)行的代碼的,因?yàn)樾枰虞d并行任務(wù)和收集執(zhí)行結(jié)果。然而,優(yōu)化這些臨界區(qū)域的代碼并且移除不必要的代碼比協(xié)調(diào)并行代碼甚至更重要。

當(dāng)你面對(duì)一個(gè)擁有太多臨街區(qū)域的執(zhí)行計(jì)劃的時(shí)候,要謹(jǐn)記Amdahl定律。如果你不能減少這些區(qū)域,那就盡力找到可以與這些區(qū)域并行執(zhí)行的任務(wù)。例如,你可以提前取出要同時(shí)執(zhí)行的并行代碼需要的數(shù)據(jù)來(lái)提高解決方案的性能。謹(jǐn)記現(xiàn)在多核硬件提供的能力并避免總是想著你僅有一個(gè)執(zhí)行單元。

理解多核并發(fā)編程的規(guī)則

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

1.      并發(fā)編程的思想—這條規(guī)則就是要謹(jǐn)記并發(fā)編程思想進(jìn)行設(shè)計(jì),就像前邊章節(jié)所提交的。

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

3.      基于任務(wù)模型編程,而不是線程—TPL允許你你編寫代碼實(shí)現(xiàn)基于任務(wù)模型的設(shè)計(jì)而不用擔(dān)心底層的線程。

4.      設(shè)計(jì)可以選擇關(guān)閉并發(fā)—當(dāng)你使用TPL寫代碼的時(shí)候,這些代碼頁(yè)可能會(huì)運(yùn)行在單核的微處理器上。

5.      避免使用鎖—利用新的類和方法、結(jié)構(gòu)體解決對(duì)于復(fù)雜同步方式的需求是很重要的。TPL使避免在很多復(fù)雜的情景下使用重量級(jí)鎖變得更簡(jiǎn)單,它提供了新的輕量級(jí)的同步方法。

6.      借助已有的工具和類庫(kù)的幫助進(jìn)行并發(fā)編程—Visual Studio 2010提供了新的工具調(diào)試、測(cè)試、協(xié)調(diào)并行代碼。在本書中你將會(huì)學(xué)習(xí)很多相關(guān)的工具和類庫(kù)。

7.      使用可伸縮的內(nèi)存分配策略—TPL在CLR里提供了可伸縮的內(nèi)存分配策略,當(dāng)任務(wù)和線程執(zhí)行的時(shí)候,它會(huì)自動(dòng)的執(zhí)行內(nèi)存分配策略。然而,為了最大程度的利用緩存,你必須分析不同的分配可能性,并且盡力避免在每個(gè)任務(wù)里消耗過多的內(nèi)存。

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

為NUMA和更好伸縮性進(jìn)行設(shè)計(jì)

近年來(lái),對(duì)多處理器支持的最廣泛的模型是NUMA(non-uniform memory access)架構(gòu),而不是SMP(symmetricmultiprocessor)架構(gòu)。SMP的一個(gè)最大的問題就是處理器總線會(huì)成為將來(lái)可伸縮性的瓶頸,因?yàn)槊總€(gè)處理器都擁有等同的能力方位內(nèi)存和io。

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

一個(gè)單個(gè)的電腦或者機(jī)器可以有一個(gè)或者多個(gè)group。

每一個(gè)group有一個(gè)或者多個(gè)NUMA節(jié)點(diǎn)。

每個(gè)NUMA節(jié)點(diǎn)有一個(gè)或者多個(gè)物理處理器。

每個(gè)處理器有一個(gè)或者多個(gè)物理核心,因?yàn)樗?jīng)常是多核處理器。

每個(gè)物理內(nèi)核可以提供一個(gè)或者多個(gè)邏輯處理器或者硬件線程。

圖1-17

圖1-18展示了由兩個(gè)NUMA節(jié)點(diǎn)構(gòu)成一個(gè)group的計(jì)算機(jī)。每個(gè)NUMA節(jié)點(diǎn)有兩個(gè)共享訪問局部?jī)?nèi)存和io的兩個(gè)處理器組成。如果NUMA節(jié)點(diǎn)0的處理器0的物理核心0的線程需要訪問位于NUMA節(jié)點(diǎn)1的數(shù)據(jù),則它必須使用兩個(gè)NUMA節(jié)點(diǎn)之間的共享總線,這會(huì)比直接訪問自己的局部?jī)?nèi)存要慢很多。

圖 1-18

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

NUMA的硬件需要特殊的優(yōu)化。應(yīng)用程序必須知道NUMA硬件和配置。我們可以執(zhí)行那些需要訪問NUMA節(jié)點(diǎn)的相同的內(nèi)存的任務(wù)和線程模型。應(yīng)用程序應(yīng)該避免無(wú)效的內(nèi)存方位,并且他們喜歡并發(fā),考慮到內(nèi)存的未知。

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

責(zé)任編輯:林師授 來(lái)源: hou478410969的博客
相關(guān)推薦

2012-04-01 11:16:47

2025-07-25 06:48:26

Java編程并發(fā)編程

2025-08-05 06:00:00

并發(fā)編程Java開發(fā)

2019-09-16 08:45:53

并發(fā)編程通信

2025-08-01 06:00:00

死鎖并發(fā)編程Java

2025-08-25 06:05:00

代碼并發(fā)編程等待通知模型

2021-03-23 14:42:34

編程開發(fā)代碼

2020-01-14 11:17:33

Go并發(fā)Linux

2018-09-12 15:38:42

Javaatomic編程

2012-03-29 09:36:17

2024-10-14 09:58:06

并發(fā)編程共享

2024-10-18 11:29:15

2022-03-02 08:20:54

并發(fā)編程java后端開發(fā)

2024-01-29 10:34:37

Java編程

2024-03-04 11:17:25

2009-06-30 10:10:15

Namespace用法Flex

2023-07-03 09:59:00

并發(fā)編程并發(fā)容器

2009-04-09 09:19:25

C#規(guī)則表達(dá)式.NET

2015-03-16 09:08:48

編程教訓(xùn)金典老者教訓(xùn)

2023-09-27 09:00:02

SpringBoot并發(fā)編程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)