日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

说说Thread.Sleep(0)的那些奇怪的事

發(fā)布時間:2025/7/14 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 说说Thread.Sleep(0)的那些奇怪的事 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

寫在前面

最近在弄一個傳輸組件,用到很多多線程的知識,其中有個問題,困擾我很久,不知道是什么原因,腦子一熱,在傳輸過程中,添加了一句代碼Thread.Sleep(0)。那個問題竟然解決了,耗費我一上午的時間,一點一點的排查是不是代碼邏輯有問題。到最后一句話解決了,興奮歸興奮,但是為什么這句話就能解決我的問題呢?而且還是睡個0,是不是你也遇到過這種情況?不妨一起討論下這句神奇的代碼!

Thread.Sleep(0)妙解

這里收集了網(wǎng)上的一篇文章,解釋的非常有趣,轉(zhuǎn)載在博客中,也推薦給大家一起看看。

[轉(zhuǎn)載]Thread.Sleep(0)妙用

摘錄文章的幾段話,你也可以有個大概的概念。

操作系統(tǒng)中,CPU競爭有很多種策略。Unix系統(tǒng)使用的是時間片算法,而Windows則屬于搶占式的。

  • 在時間片算法中,所有的進程排成一個隊列。操作系統(tǒng)按照他們的順序,給每個進程分配一段時間,即該進程允許運行的時間。如果在?時間片結(jié)束時進程還在運行,則CPU將被剝奪并分配給另一個進程。如果進程在時間片結(jié)束前阻塞或結(jié)束,則CPU當(dāng)即進行切換。調(diào)度程序所要做的就是維護一張就緒進程列表,當(dāng)進程用完它的時間片后,它被移到隊列的末尾。
  • 所謂搶占式操作系統(tǒng),就是說如果一個進程得到了?CPU?時間,除非它自己放棄使用?CPU?,否則將完全霸占?CPU?。因此可以看出,在搶占式操作系統(tǒng)中,操作系統(tǒng)假設(shè)所有的進程都是“人品很好”的,會主動退出?CPU?。在搶占式操作系統(tǒng)中,假設(shè)有若干進程,操作系統(tǒng)會根據(jù)他們的優(yōu)先級、饑餓時間(已經(jīng)多長時間沒有使用過?CPU?了),給他們算出一?個總的優(yōu)先級來。操作系統(tǒng)就會把?CPU?交給總優(yōu)先級最高的這個進程。當(dāng)進程執(zhí)行完畢或者自己主動掛起后,操作系統(tǒng)就會重新計算一?次所有進程的總優(yōu)先級,然后再挑一個優(yōu)先級最高的把?CPU?控制權(quán)交給他。

一個例子

例子說明:在控制臺中創(chuàng)建兩個線程,在線程中分別輸出0-100的數(shù)字,代碼如下:

1 class Program 2 { 3 static void Main(string[] args) 4 { 5 Thread thchild = new Thread(new ParameterizedThreadStart(Run)); 6 thchild.Start("thread 1 開始"); 7 Thread thchild2 = new Thread(new ParameterizedThreadStart(Run)); 8 thchild2.Start("thread 2 開始"); 9 Console.Read(); 10 } 11 static void Run(object obj) 12 { 13 14 for (int i = 0; i < 100; i++) 15 { 16 Console.WriteLine(obj.ToString() + "\t" + i.ToString()); 17 //Thread.Sleep(0); 18 } 19 } 20 }

測試結(jié)果

加上Thead.Sleep(0)測試結(jié)果

通過上面兩張圖的簡單對比,有這樣一種現(xiàn)象

在沒有Thread.Sleep(0)的時候,Thread1和Thread2交換的頻率比較低,在使用了Thread.Sleep(0)的時候,Thread1和Thread2交換頻率明顯增高。

總結(jié)

關(guān)于Thread.Sleep(0)的詳細內(nèi)容可參考上面轉(zhuǎn)載的那篇文章,覺得介紹的更詳細,也比較有趣。當(dāng)然給的例子,也是一種猜測性質(zhì)的,系統(tǒng)中跑了那么多的線程,是不是對這個測試結(jié)果有干擾,也未可知。也不知道該怎么測試更合適。如果您也遇到過這種情況,不妨留言,討論一下。

總結(jié)

以上是生活随笔為你收集整理的说说Thread.Sleep(0)的那些奇怪的事的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。