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

首頁 > 學院 > 開發設計 > 正文

在.NET上執行多線程操作要考慮的兩大因素

2019-11-17 04:20:27
字體:
來源:轉載
供稿:網友

線程管理

線程管理現在變得越來越容易了。在.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)); } }
 


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

數據完整性

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

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产女人精品视频| 亚洲精品中文字幕av| 日韩欧美极品在线观看| 亚洲第一精品自拍| 青青草国产精品一区二区| 久久综合免费视频| 亚洲字幕一区二区| 国产午夜精品全部视频在线播放| 成人两性免费视频| 亚洲图片欧洲图片av| 国产精品久久久久久久久免费看| 日韩欧美亚洲国产一区| 91精品国产综合久久香蕉的用户体验| 欧美丝袜美女中出在线| 中文字幕日韩电影| 国产精品海角社区在线观看| 亚洲欧美另类在线观看| 国产精品极品在线| 日韩电影在线观看永久视频免费网站| 亚洲18私人小影院| 日本成人激情视频| 亚洲加勒比久久88色综合| 亚洲裸体xxxx| 国产欧美日韩91| 国产精品久久婷婷六月丁香| 午夜精品99久久免费| 久久精品色欧美aⅴ一区二区| 亚洲色图欧美制服丝袜另类第一页| 日韩av在线免费播放| 精品国产成人在线| 欧美激情国产日韩精品一区18| 日韩成人av网址| 一本一道久久a久久精品逆3p| 欧美日韩亚洲网| 麻豆国产va免费精品高清在线| 欧美日韩国产限制| 亚洲人av在线影院| 亚洲精品第一国产综合精品| 欧美激情小视频| 亚洲娇小xxxx欧美娇小| 欧美日韩国产丝袜另类| 美女视频久久黄| www.亚洲成人| 国产日韩欧美另类| 日韩电影免费在线观看| 久久伊人精品一区二区三区| 日韩资源在线观看| 综合国产在线观看| 91免费看片在线| 国产日韩欧美在线| 亚洲天堂男人天堂女人天堂| 欧美与黑人午夜性猛交久久久| 国产精品极品美女粉嫩高清在线| 国产盗摄xxxx视频xxx69| 国产精品麻豆va在线播放| 欧美丝袜一区二区| 国产一区二区三区在线| 亚洲高清久久久久久| 欧美大荫蒂xxx| 亚洲美女av电影| 亚洲 日韩 国产第一| 国产精品福利小视频| 欧美极品美女电影一区| 亚洲最大在线视频| 日韩欧美一区二区三区| 九九精品在线观看| 国产精品久久久久久久久借妻| 欧美日韩在线观看视频小说| 成人日韩在线电影| 日本精品一区二区三区在线播放视频| 57pao成人国产永久免费| 51精品国产黑色丝袜高跟鞋| 日本91av在线播放| 中文字幕不卡av| 亚洲视屏在线播放| 欧美一区二区三区图| 伦伦影院午夜日韩欧美限制| 久久久999国产精品| 精品久久在线播放| 国产成人综合av| 影音先锋日韩有码| 国产亚洲在线播放| 日韩在线中文视频| 亚洲国产日韩欧美在线图片| 亚洲综合日韩在线| 九九热r在线视频精品| www.午夜精品| 欧美丝袜一区二区三区| 亚洲一区第一页| 欧美自拍大量在线观看| 亚洲女人初尝黑人巨大| 日韩有码在线视频| 中文.日本.精品| 亚洲久久久久久久久久久| 国产专区精品视频| 国产精品第10页| 中文字幕亚洲综合久久筱田步美| zzjj国产精品一区二区| 日韩av片免费在线观看| 国产精品专区h在线观看| 欧美综合激情网| 亚洲视频网站在线观看| 欧美午夜片在线免费观看| 国产美女高潮久久白浆| 国产美女久久久| 97国产真实伦对白精彩视频8| 91亚洲国产成人精品性色| 久久99久久亚洲国产| 91日韩在线播放| 深夜成人在线观看| 国产91成人video| 日韩精品高清视频| 欧美色视频日本高清在线观看| 国产精品美女久久久免费| 这里只有精品视频在线| 自拍偷拍亚洲精品| 日韩免费看的电影电视剧大全| 国产精品aaa| 日韩激情视频在线播放| 精品福利在线看| 亚洲午夜未删减在线观看| 欧美夜福利tv在线| …久久精品99久久香蕉国产| 中文字幕不卡在线视频极品| 久久婷婷国产麻豆91天堂| 久久伊人精品视频| 欧美大片免费看| 欧美高跟鞋交xxxxhd| 国产精品白丝av嫩草影院| 国产一区二区三区网站| 午夜欧美不卡精品aaaaa| 亚洲在线免费视频| 国产成人精品国内自产拍免费看| 欧美猛少妇色xxxxx| 免费不卡欧美自拍视频| 欧美三级免费观看| 性色av一区二区三区在线观看| 国产精品日韩一区| 亚洲第一色在线| 亚洲人成人99网站| 美女精品视频一区| 国产剧情久久久久久| 久久精品成人动漫| 日韩av片免费在线观看| 九九热视频这里只有精品| 国产精品久久久久久久天堂| 日本免费久久高清视频| 国产精品美女免费视频| 日韩在线www| 91沈先生在线观看| 91亚洲精品久久久久久久久久久久| 亲爱的老师9免费观看全集电视剧| 国产激情久久久久| 国产欧美日韩中文字幕在线| 精品色蜜蜜精品视频在线观看| 久久天天躁狠狠躁夜夜av| 中文国产成人精品久久一| 日韩中文字幕国产精品| 国产日本欧美一区| 成人免费在线视频网站| 精品中文字幕久久久久久| 日韩在线观看免费高清完整版| 国产精品久久不能| 一区二区三区回区在观看免费视频|