国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

.NET上執行多線程應該注意的兩點

開發 后端
在初嘗多線程操作的甜頭后,總會想學習更多復雜的項目以便可以真正探索這個問題,并能充分利用其功能。通常,你所面臨的挑戰有兩個:線程管理和數據完整性。

線程管理

線程管理現在變得越來越容易了。在.NET架構中,你可以從線程池中獲取線程。線程池是一個生成線程的工廠,如果它已經生成了一定數量的線程且還沒有被破壞的話,對它的調用會被阻止。但是,如何確保不會有太多的線程在規定時間內運行?畢竟,如果每個線程能夠占用一個CPU核的100%,那么有超過CPU核數量的線程運行,只會導致操作系統啟動線程時間分配,這將導致上下文切換和低效率運行。換句話說,同一核上的兩個線程不會以兩倍的時長完成,可能需要用兩倍再加10%左右的時間來完成。與一個線程相比較的話,三個線程在同一核上想占用100%的CPU使用率可能會需要3.25—3.5倍的時長來完成。我的經驗是,每個核都有多個線程試圖占用100%的CPU,但它們都不能達到目標。

所以,要怎樣分配正在運行的線程數量呢?

有一個辦法是在線程之間建立一個共享的旗語對象。在線程開始運行前,它會嘗試調用旗語的WaitOne模式,并在完成后釋放旗語。對CPU的核數量設置旗語限制,(使用EnvironmentProcessorCount功能限定);這將防止您的系統在同一時間運行的線程數多于核數量。與此同時,從線程池中拉出線程將確保您不會在同一時間創建過多線程。如果一次創建線程過多,即使他們并沒運行,那也是浪費系統資源。因為每個線程都要消耗資源。使用旗語的一般模式如下所示:

static Semaphore threadBlocker; 
static void Execute(object state)
{threadBlocker.WaitOne(); //Do work threadBlocker.Release(); }
static void RunThreads()
{threadBlocker = new Semaphore(0, Environment.ProcessorCount); 
for(int x = 0; x <= 2000; x++)
{ThreadPool.QueueUserWorkItem(new WaitCallback (Execute)); } 
}

當然還有其他一些辦法可以解決這一問題。前一段時間我想要保持對象的一份清單。每個對象代表每個工人部件的完整狀態。執行和完成時,工人部件都會被填入數據。并且他會設置某個功能以指示任務完成。主線程將掃描對象清單,如果運行的線程數量足夠少,就開始運行另一個。說實話,雖然這個方法可行,但對于代碼和調試來說這絕對是個噩夢,所以我一點也不推薦。

數據完整性

總體而言,在數據完整性方面,你要擔心的問題是競爭條件和死鎖。多個線程試圖在同一時間更新相同的對象就會造成競爭條件,這將招致麻煩。想象一下如果使用下面這段代碼:

int x=5;

x=x+10;

現在,如果線程A和線程B在同一時間運行此代碼,將會發生什么情況?它可以運行得很好?還是會出現什么問題?如果出現問題,又是些怎樣的問題呢?每個線程都不會一次執行全部語句。因此,我們可以按照以下順序操作:

1. Thread A retrieves the value of x (5).
2. Thread B retrieves the value of x (5).
3. Thread A assigns x + 10 (15) to x.
4. Thread B assigns x + 10 (15) to x.
5. x is now equal to 15.

或者,相同的代碼可以按照不同的順序:

1. Thread A retrieves the value of x (5).
2. Thread A assigned x = 10 (15) to x.
3. Thread B retrieves the value of x (15).
4. Thread B assigns x + 10 (25) to x.
5. x is now equal to 25.

在.NET架構中,最簡單也最常見的解決競爭條件的方法是使用“臨界區”。而在VB.NET中,該語句是“加鎖”,并在C#中是“鎖定”,這兩種語句都是把對象作為參數。其他嘗試鎖定相同對象實例使用的臨界區(包括上文所指的)會阻止運行直到鎖定解除,這樣每次就只有一個臨界區運行。我們先前舉例的一段代碼現在看起來是這樣的:

int x=5; 
object lockObject=new object();
Monitor.Enter(lockObject);
x=x+10;
Monitor.Exit(lockObject);

什么是監控器可以提供而臨界區做不到的呢?答案是沒有。除非你在解鎖后需要更細粒度的控制權。有些復雜的代碼可能需要鎖定或長或短的一段時間,這都取決于運行的情況,比方一個變量的值。在這種情況下,選擇監控器要比需選擇臨界區更合適。

另一個值得關注的有關數據完整性的問題是死鎖。當多個線程鎖定資源導致它們都不能夠繼續運行時,就會出現死鎖。例如:

Thread A: 
Monitor.Enter(object1);
Monitor.Enter(object2);
//Do work
Monitor.Exit(object1);
Monitor.Exit(object2);
Thread B:
Monitor.Enter(object2);
Monitor.Enter(object1);
//Do work
Monitor.Exit(object1);
Monitor.Exit(object2);

如果線程A和線程B都調用它們的第一段語句并且同時完成運行,那它們都無法調用它們的第二段語句——這就是一個死鎖。所以編寫代碼的時候細心,要仔細想清楚怎樣編寫代碼才更有利。死鎖的發生常見于新手,因為他們過分設置鎖定把它變得太詳細了。如果代碼被嵌套鎖定通常表明需要對編寫的代碼加以認真檢查。

【編輯推薦】

  1. .NET中異常處理的幾個誤區
  2. 使用Ja.Net實現Java和.NET的完美互用
  3. 基于.NET平臺的分層架構實戰
責任編輯:田超 來源: IT專家網論壇
相關推薦

2009-07-16 09:25:27

Java常量定義

2018-08-28 06:21:19

網線布線線纜

2021-08-26 14:55:55

開發React代碼

2012-11-12 09:26:06

.NET多線程

2013-01-05 14:25:27

大數據

2011-04-29 08:46:58

C#代碼規范

2025-09-10 09:15:36

2010-03-18 16:02:09

python 多線程

2021-05-28 17:33:33

5G5G網絡工業互聯網

2015-08-03 10:25:58

C語言特性不為人知

2010-04-14 09:20:26

.NET多線程

2024-04-30 12:56:00

多線程.NET

2009-07-28 15:30:34

ASP.NET多線程

2009-12-30 14:14:39

PPPoA體系

2022-04-10 23:07:21

瀏覽器FirefoxLinux

2010-03-17 15:45:13

無線設備兼容性

2010-05-13 11:12:59

統一通信平臺

2010-02-02 09:54:05

軟交換技術

2012-08-23 11:18:15

2009-07-21 17:09:47

ASP.NET多線程
點贊
收藏

51CTO技術棧公眾號

久久亚洲欧美日韩精品专区| 免费日韩在线观看| 亚洲最大的免费视频网站| 亚洲一级二级三级| 亚洲精品偷拍视频| 美日韩精品视频| 成人网在线免费看| 美国成人xxx| 亚洲国产精品999| 激情婷婷丁香| 麻豆精品在线播放| 精品中文视频| 亚洲欧美国产毛片在线| 2019国产精品视频| 国产九九在线| 欧美午夜在线视频| 一区视频二区视频| 成人影院入口| 精品国产露脸精彩对白 | 国产精品久久成人免费观看| 亚洲在线电影| 精品一区二区三区自拍图片区 | 中文字幕在线资源| 亚洲一区二区三区四区在线| 丁香婷婷自拍| 亚洲综合成人在线| 在线观看国产麻豆| 一本大道久久a久久精品综合| 亚洲天堂二区| 日韩欧美成人免费视频| 日韩精品视频无播放器在线看| 亚洲尤物在线视频观看| 日韩在线无毛| 日韩一级大片在线观看| 2021中文字幕在线| 日韩亚洲欧美成人| 激情五月综合婷婷| 国产精品无av码在线观看| 精品无码久久久久久久动漫| 日韩精品乱码av一区二区| 影音先锋欧美资源| 不卡电影一区二区三区| 四虎黄色影院| 欧洲av一区二区嗯嗯嗯啊| 高h视频在线播放| 久久天天躁狠狠躁夜夜躁| 日韩极品在线| 成人av中文| 国产福利精品一区二区| 羞羞的视频网站| 欧美久久久久中文字幕| 中文字幕一区久| 91产国在线观看动作片喷水| 欧美久久一区| 在线观看av的网址| 亚洲人成在线观看一区二区| av在线免费观看网| 国产亚洲xxx| 国产一区二区三区电影在线观看| 韩国一区二区三区美女美女秀| 狠狠色伊人亚洲综合成人| 亚洲jjzzjjzz在线观看| 欧美喷水一区二区| 成人在线视频区| 91精品久久久久久| 国产999精品久久久久久| 中国一级特黄毛片大片| 亚洲国产小视频在线观看| 欧美人与动xxxxz0oz| 韩国成人动漫在线观看| 久久人人爽人人爽| 欧美性天天影视| 国模私拍视频一区| 一区二区日本视频| 欧美一级黄色影院| 欧美一区二区三区在线观看| 美女被啪啪一区二区| 成人av电影免费在线播放| 翔田千里一区| 不卡av日日日| 久久国产精品毛片| 91美女在线免费观看| 亚洲精品视频中文字幕| 久久久国产精品| 欧在线一二三四区| 亚洲电影免费观看高清完整版在线观看 | 国产日韩欧美二区| 久久亚洲欧美国产精品乐播| 欧美三级黄网| 欧美一级高清免费播放| 国产一区视频在线看| 香港经典三级在线| 国产婷婷97碰碰久久人人蜜臀| 欧美日韩一二三四| 很污的网站在线观看| 欧美日韩国产高清一区二区三区| 亚洲精品黑牛一区二区三区| 亚洲精品中字| 欧美视频在线播放| 自拍偷拍一区二区三区| 午夜一区二区三区视频| 成人网av.com/| 一区二区三视频| 一本大道av一区二区在线播放 | 绯色av一区| 欧美精品一二区| 经典一区二区三区| 大乳在线免费观看| 日韩美女av在线免费观看| 97se亚洲国产综合自在线不卡 | 91精品国产综合久久婷婷香蕉| 国产一区二区三区电影在线观看| 国产极品粉嫩福利姬萌白酱 | 国产午夜精品一区理论片飘花| 亚洲电影在线| 午夜成在线www| 欧美夜福利tv在线| 91网站在线播放| 不卡av影片| 亚洲精品在线免费| 日韩午夜在线观看视频| 亚洲第一伊人| 国产福利在线视频| 91精品久久久久久蜜桃| 亚洲va国产va欧美va观看| 激情综合网站| av三级在线播放| 成人激情视频在线| 日韩人体视频一二区| 欧美91福利在线观看| 四虎精品成人免费网站| 91丨九色丨国产在线| 激情成人在线视频| 欧美国产美女| 黄色电影免费在线看| 亚洲最大av网站| 色综合久久综合网97色综合| 欧美三级免费| 国内精品久久久久国产| 一区二区不卡在线视频 午夜欧美不卡'| 精品剧情v国产在线观看在线| 日本va欧美va精品| 超碰在线99| 国精产品一区一区三区视频| 久久亚洲精品一区| 国产精品久久午夜夜伦鲁鲁| 九九视频精品全部免费播放| 领导边摸边吃奶边做爽在线观看 | 亚洲va久久久噜噜噜久久| 亚州福利视频| 92国产精品久久久久首页 | jizz日韩| 亚洲欧美日产图| 久久精品国产视频| 欧美激情在线一区二区三区| 国产一区二区三区探花| 18视频免费网址在线观看| 一本久久a久久精品vr综合 | 国精产品一区一区三区四川| 春日野结衣av| 成人免费视频视频在线观看免费 | 日韩精品免费在线| 国产91精品一区二区麻豆网站| 日本免费在线一区| 美女av在线免费观看| 成人免费网视频| 精品国产乱码久久| 久久九九99视频| 中文一区一区三区免费在线观看| 黄色小说在线播放| 日韩av在线综合| 91在线观看免费高清| 日韩hd视频在线观看| 中文字幕av资源一区| 婷婷另类小说| 亚洲人成在线网站| 成全视频全集| 视频一区二区三区免费观看| 欧美美女操人视频| 欧美性受xxxx黑人xyx性爽| 福利一区二区在线观看| 欧美1级片网站| 免费高清视频在线一区| 又黄又爽无遮挡| 色一情一乱一乱一区91| 国产精品亚洲片夜色在线| 亚洲白拍色综合图区| 亚洲美女免费视频| 久久精品国产亚洲a| 日本精品黄色| 99riav视频一区二区| 国产高清一区在线观看| 国产三级三级三级看三级| 九色91在线视频| 日韩av手机在线| 在线视频欧美日韩| 欧美三级视频在线观看| 国产精品毛片无遮挡高清| 国精品**一区二区三区在线蜜桃 | 国产精品久久9|