日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线程与线程池

發布時間:2024/4/17 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程与线程池 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.?????? 線程基礎

Windows中,線程的職責是對CPU進行虛擬化,可將線程理解為一個邏輯CPU。Windows為每個進程提供該進程專用的線程。

由于線程是對CPU進行虛擬化,使得線程會產生空間(內存耗用)和時間(上下文切換)上的開銷。

  1.??????? 空間開銷:在默認情況下,Windows為每個線程的用戶模式棧分配1MB內存。

  2.??????? 時間開銷:在任何給定的時刻,Windows只將一個線程分配給一個CPU。該線程允許運行一個“時間片”。一旦時間片到期,Windows就上下文切換到另一個線程。Windows執行一次上下文切換大約需要30毫秒。

結論:盡可能避免使用線程,但有時必須使用線程來提高程序的響應速度和執行多任務。

2.?????? 前后臺線程

在CLR中的線程只有前臺線程和后臺線程兩種。一個進程中所有前臺線程都停止運行時,CLR將強制終止所有正在運行的后臺線程,并且不會拋出異常。只要有一個前臺線程在運行,應用程序的進程就在運行。所以前臺線程適合執行關鍵任務,后臺現在適合執行非關鍵任務。下面代碼用于說明前后臺線程與進程的關系。

private static void Main(string[] args){//創建專用線程var t = new Thread(ThreadWork){Name = "NewThread1",//指定是否為后臺線程,修改該屬性驗證前后臺線程與進程的關系IsBackground = false};//創建專用線程 t.Start();Console.WriteLine("進程結束");}private static void ThreadWork(){Console.WriteLine("線程啟動:" + Thread.CurrentThread.Name);//讓當前線程休眠3秒鐘,把線程執行權讓給優先級高的其他線程執行,//避免一直占有線程執行權。3秒鐘過后線程醒來,一定能立即恢復執行。//這是因為在那個時刻,其它線程可能正在運行而且沒有被調度為放棄執行,除非//1、“醒來”的線程具有更高的優先級//2、正在運行的線程因為其它原因而阻塞。Thread.Sleep(3000);Console.WriteLine("線程完成" + Thread.CurrentThread.Name);//這個方法返回后,該專用線程將終止。 }

?

3.?????? 線程池

3.1.??? 線程池基礎

由第一節線程基礎的結論可知,我們應該在保持代碼響應能力的同時創建盡可能少的線程。CLR線程使用Windows的線程處理能力,一個CLR線程直接對應一個Windows線程。為了改善創建和銷毀線程帶來的空間和時間上的開銷,CLR包含代碼來管理它自己的線程池。可將線程池想象為可由你的應用程序使用的一個線程集合。每個CLR一個線程池。

CLR初始化時,線程池中沒有線程。在內部,線程池維護一個操作請求隊列。應用程序向線程池發出一個請求時,如果線程池中沒有線程,就創建一個新線程用于處理應用程序的請求。當線程池中的線程完成任務后,線程不會被銷毀,而是返回到線程池中,并且進入空閑狀態,等待響應另一個請求。由于線程池中的線程處理完任務后不銷毀自身,所以不再產生額外的性能損失。如果應用程序停止向線程池發出請求,線程池中的線程都處于空閑狀態,一段時間后,線程會自己醒來終止自己并且釋放資源。線程終止自己時會產生一定的性能損失,然而,線程池中的線程終止自己是因為閑得慌,說明應用程序本身沒做什么事,所以這個性能損失關系不大。

3.2.??? 線程池管理

不同CLR的版本,其內部結構有一定的變化。最好將線程池看成黑盒子。目前,線程池的工作非常理想,強烈建議信任它。

  1.??????? 設置線程池上限

CLR允許開發人員設置線程池的最大線程數,但永遠都不應該為線程池設置上限,因為可能發生饑餓或死鎖。由于存在饑餓和死鎖問題,所以CLR團隊一直都在穩步增加線程池默認能夠擁有的最大線程數,目前默認值為1000個線程。

?

注:參考CLR via C#第三版 第25、26章

轉載于:https://www.cnblogs.com/jintianzhang/archive/2013/04/10/3013447.html

總結

以上是生活随笔為你收集整理的线程与线程池的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。