亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

異步/多線程/任務/并行編程之一:如何選擇合適的多線程模型?

2020-01-24 03:26:45
字體:
來源:轉載
供稿:網友

異步、多線程、任務、并行編程之一:選擇合適的多線程模型

本篇概述:

@FCL4.0中已經存在的線程模型,以及它們之間異同點;

@多線程編程模型的選擇。

 

1:異步、多線程、任務、并行的本質

這四個概念對應在CLR中的本質,本質都是多線程。

異步,簡單的講就是BeginInvoke、EndInvoke模式,它在CLR內部線程池進行管理;

多線程,體現在C#中,可以由類型Thread發起。也可以由ThreadPool發起。前者不受CLR線程池管理,后者則是。FCL團隊為了各種編程模型的方便,還另外提供了BackgroundWorker和若干個Timer,基本上它們都是ThreadPool的加強,增加了一些和調用者線程的交互功能;

任務(Task),為FCL4.0新增的功能,在一個稱之為任務并行庫(TPL)的地方,其實也就是System.Threading.Tasks命名空間下。任務并行庫名字取的很玄乎,其實它也是CLR線程池的加強。優化了線程間的調度算法,增加了和調用者線程的交互功能;

并行(Parallel),為FCL4.0新增的功能,也屬于TPL。并行在后臺使用Task進行管理,說白了,因為Task使用的線程池線程,所以Parallel自然使用的也是線程池線程進行管理,它的本質僅僅是進一步簡化了Task。在這里要增進一個對于并行的理解。實際上,多線程天然就是并行的。及時不用任務并行庫,用Thread類型新起兩個線程,CLR或者說Windows系統也會將這兩個線程根據需要安排到兩個CPU上去執行。所以,并不是因為多了任務并行庫,CLR才支持并行計算,任務并行庫只是提供了一組API,使我們能夠更好的操縱線程進行并行開發而已。

2:遺憾

Jeffrey Richter大叔說,微軟提供了這么多線程模型,是遺憾的,因為這制造了混亂。很多開發者都不知道該選用哪個類型來編寫自己的多線程代碼。我們對微軟總是又愛又恨,它總是不停的更新一些東西,逼迫我們不停的學習。但是也好,進步導致它不會過早死掉,讓我們徹底失掉飯碗。
C#剛出來的被人笑,現在它的很多語法特性已經比Java優美。很多時候我們太擅長于嘲笑,以致最后只能哭。順便說一句,我依然是那么的喜歡JAVA,只是很久沒用它而已。

3:現在,該用什么來編寫多線程 

如果你在FRAMEWORK4.0下編寫代碼,那么應該按照這個優先級來撰寫多線程代碼: 

優先

次優先

不得以

Parallel(含擴展庫PLinq)

Task

ThreadPool(BackgroundWorker,Timer)

異步

Thread

這個表滿足了大部分情況下的一個優先級指導,但在某些情況下會有例外。

3.1:為什么 Parallel和Task優先級一樣,而不是優于Task?

Parallel雖然在后臺使用Task進行管理,并且它所謂簡化了對于Task的操作,但是它有一個重要的特征區別與Task:Parallel會阻滯調用者線程。查看Paralle的成員,有For、ForEach、Invoke方法,它甚至都沒提供一個BeginInvoke方法,也很好的暗示了這一點。不過雖然是同步的執行的,Parallel還是會把多個任務分配到多個CPU上去。
Task被用的最多的是Start方法,它不會阻滯主線程。雖然Task也提供了同步的啟動線程的方法RunSynchronously,但一般用的不多。 

3.2:何時用異步,何時用線程或線程池

這需要從“IO操作的DMA(Direct Memory Access)模式”講起。通過DMA的數據交換幾乎可以不損耗CPU的資源。在硬件部分,硬盤、網卡、聲卡、顯卡等都有DMA功能??梢院唵蔚恼J為,當我們的工作線程需要操作I/O資源的時候(如讀取一個大文件、讀取一個網頁、讀取Socke包等),我們就需要用異步去做這些事情。異步模式只會在工作開始以及工作結束的時候占用CLR線程池,其它時候由硬盤、網卡等硬件設備來處理具體的工作,這就不會過多占用到CPU空間和時間損耗。 

概括而言:

計算密集型工作,直接采用線程;

IO密集型工作,采用異步機制;

當我們不清楚什么工作是I/O密集型的,一個不是很恰當的指導就是:查看FCL類型成員,如果成員提供了類似BeginDosomething方法的,則優先使用它,而不是新起一個線程或丟到線程池。

3.3:線程池的優勢

新起線程,會帶來很大的開銷,這些開銷主要集中在:分配線程內核對象、線程環境塊、用戶模式棧、內核模式棧所需要的內存空間,加載的DLL的DLLMain方法,并傳遞連接標志,以及線程上下文切換。由于線程如此昂貴,所以對于普通的開發要求來說,線程池就是一個很好的選擇。線程池替開發人員管理工作線程,當一項工作完畢的時候,CLR不會銷毀這個線程,而是會保留這個線程一段時間,看是否有別的工作需要這個線程。至于何時銷毀或新起線程,由CLR決定。


3.4:何時用Thread 
以上的各種線程模型,它們最終都是Thread。 那么什么時候需要Thread直接出場呢?

最重要的使用Thread的理由是,我們需要控制線程的優先級。Thread之上的線程模型都不支持優先級設置。設置一個線程的高優先級可以使它獲得更多的CPU時間;

再者,可以控制線程為前臺線程。當然,由Thread新起的線程默認就是前臺線程。前臺線程不隨著調用者線程的中斷而中斷,這使得我們可以用Thread來進行一些關鍵性的操作。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品日韩欧美大师| 亚洲精品久久久久久久久久久| 亚洲加勒比久久88色综合| 中文字幕欧美亚洲| 日韩激情视频在线| 欧洲永久精品大片ww免费漫画| 久久成人精品一区二区三区| 亚洲精品动漫100p| 美女av一区二区| 欧美高清视频一区二区| 久久综合久中文字幕青草| 亚洲偷熟乱区亚洲香蕉av| 九色成人免费视频| 正在播放国产一区| 国产精品免费视频久久久| 97在线日本国产| 欧美一级淫片丝袜脚交| 精品人伦一区二区三区蜜桃免费| 国产在线视频一区| 日本一欧美一欧美一亚洲视频| 草民午夜欧美限制a级福利片| 国产视频精品va久久久久久| 国产精品久久久久久久天堂| 亚洲精品国产免费| 91在线|亚洲| 亚洲国产中文字幕在线观看| 国产精品免费视频xxxx| 成人h片在线播放免费网站| 日本国产精品视频| 国产精品成人免费视频| 欧美久久久精品| 国产国语刺激对白av不卡| 成人免费网站在线| 成人欧美在线观看| 国产精品极品美女在线观看免费| 精品一区二区三区四区在线| 亚洲国产美女精品久久久久∴| 久久久久久久激情视频| 欧美韩国理论所午夜片917电影| 欧美尤物巨大精品爽| 日韩免费观看视频| 亚洲男人天堂九九视频| 亚洲视频国产视频| 欧美国产视频一区二区| 亚洲精品国产suv| 一本一本久久a久久精品牛牛影视| 国产精品88a∨| 欧美日产国产成人免费图片| 中文字幕在线看视频国产欧美在线看完整| 欧美激情欧美激情| 欧美精品久久久久久久久久| 欧美自拍视频在线| 国内精品久久久久久久久| 欧美激情一区二区三级高清视频| 成人午夜一级二级三级| 国产欧美日韩最新| 俺去亚洲欧洲欧美日韩| 午夜精品视频网站| 国产精品免费久久久| 欧美一级大片在线观看| 久久久久久国产精品| 久久国产色av| 日韩精品极品在线观看播放免费视频| 国产精品视频不卡| 日韩精品视频免费在线观看| 精品视频在线观看日韩| 久久久久久久久久久亚洲| 国产精品成av人在线视午夜片| 久久九九免费视频| 久久免费在线观看| 久久99久国产精品黄毛片入口| 45www国产精品网站| 欧美日韩免费一区| 性色av一区二区三区红粉影视| 欧美精品videosex牲欧美| 久久免费精品视频| 欧美成人网在线| 欧美在线xxx| 色偷偷av亚洲男人的天堂| 奇米4444一区二区三区| 精品欧美aⅴ在线网站| 在线播放国产精品| 中文字幕日韩在线视频| 中文字幕日韩av综合精品| 欧美一级片免费在线| 午夜精品美女自拍福到在线| 欧美日韩美女视频| 国产精彩精品视频| 久久精品国产综合| 成人在线国产精品| 亚洲精品国产福利| 欧美性猛交xxxxx免费看| 97婷婷涩涩精品一区| 97视频免费在线看| 国产中文欧美精品| 久久久国产精彩视频美女艺术照福利| 久久精品视频在线播放| 国产亚洲精品日韩| 久久久在线免费观看| 亚洲黄色www网站| 久久99热这里只有精品国产| 国产一区av在线| www.日韩欧美| 日韩欧美国产成人| 97av在线影院| 国产精品黄色影片导航在线观看| 国产精品27p| 国产日韩中文字幕| 欧美激情一区二区三级高清视频| 精品动漫一区二区三区| 日韩精品有码在线观看| 伦伦影院午夜日韩欧美限制| 久久乐国产精品| 欧美激情欧美激情| 亚洲毛茸茸少妇高潮呻吟| 中文字幕日韩精品有码视频| 国产一区二区三区三区在线观看| 久久久亚洲影院| 成人福利视频网| 欧美午夜片在线免费观看| 欧美香蕉大胸在线视频观看| 欧美孕妇毛茸茸xxxx| 亚洲毛片在线免费观看| 亚洲国产精品yw在线观看| 高清一区二区三区四区五区| 尤物九九久久国产精品的分类| 日韩av在线影视| 日韩成人小视频| 97婷婷大伊香蕉精品视频| 色偷偷偷综合中文字幕;dd| 精品久久久久久中文字幕一区奶水| 日日骚久久av| 亚洲国产高清高潮精品美女| 国产精品夜色7777狼人| 久久久精品免费视频| 国产99久久精品一区二区永久免费| 国产亚洲美女久久| 夜夜嗨av一区二区三区免费区| 色综久久综合桃花网| 日本久久久久亚洲中字幕| 午夜精品国产精品大乳美女| 久久福利网址导航| 国产精品扒开腿爽爽爽视频| 午夜精品久久17c| 8x拔播拔播x8国产精品| 尤物九九久久国产精品的分类| 亚洲色图av在线| 欧美床上激情在线观看| 91精品国产色综合久久不卡98| 久久精品视频中文字幕| 色偷偷噜噜噜亚洲男人的天堂| 国产欧美欧洲在线观看| 久久精品久久久久久| 亚洲美腿欧美激情另类| 欧美性jizz18性欧美| 亚洲老头老太hd| 精品国产成人在线| 精品国产91久久久久久老师| 亚洲第一色中文字幕| 精品视频—区二区三区免费| 亚洲欧美在线免费观看| 国产一区二区三区高清在线观看| 欧美视频在线观看免费网址| 日韩精品久久久久久福利|