發表文章

目前顯示的是有「開發工具類-C#-線程池」標籤的文章

自救必看三大準則

【線程】基礎知識-執行緒生命週期

圖片
  一個執行緒的生命週期,可以分作數個狀態,如下圖所示: 當你實例化一個Thread物件後,必須使用start()方法啟用它,start()方法只能執行一次,重複執行start()方法,會丟出IllegalThreadStateException。執行 start() 之後,執行緒並非馬上執行,而是進入 可執行(Runnable)狀態 ,必須由排班器將執行緒排入CPU 執行(Running) 。 執行緒有其優先權,由 1(Thread.MIN_PRIORITY)到10(Thread.MAX_PRIORITY) , 預設是 Thread.NORM_PRIORITY(5) ,您可以使用Thread的 setPriority() 方法來設定執行緒的優先權,設定必須在1到10之間,否則會丟出 IllegalArgumentException 。優先權高的執行緒會先被執行完畢,然後才會輪到優先權低的執行緒,如果優先權相同,則 輸流執行(Round-robin方式) 。 決大多數的作業系統都支援 timeslicing ,簡單的說就是作業 系統會為每個執行緒分配一小段CPU時間(quantum),時間一到就換下一個執行緒,即使現有的執行緒還沒結束。對於不支援timeslicing的 作業系統,每一個執行緒必須完成後,才能輪到下一個執行緒,在這樣的作業系統中,如果想要讓目前執行緒禮讓一下其它執行緒,讓它們有機會取得執行權, 可以在呼叫緒行緒的 yield() 方法,例如:     Thread thread = new Thread(new Runnable() {         public void run() {             // ....             while(true) {            ...

C# 線程池ThreadPool的用法簡析

圖片
可見 https sdn 而是 plain call 計時器 最大線程數 water https://blog.csdn.net/smooth_tailor/article/details/52460566 什麽是線程池?為什麽要用線程池?怎麽用線程池? 1. 什麽是線程池? .NET Framework 的ThreadPool類 提供一個線程池,該線程池可用於執行任務、發送工作項、處理異步 I/O、代表其他線程等待以及處理計時器。那麽什麽是線程池?線程池其實就是一個存放線程對象的“池子(pool)”,他提供了一些基本方法,如:設置 pool中最小/最大 線程數量、把要執行的方法排入隊列等等。 ThreadPool是一個靜態類,因此可以直接使用,不用創建對象。 2. 為什麽要用線程池?好處是什麽? 微軟官網說法如下: 許多應用程序創建大量處於睡眠狀態,等待事件發生的線程。 還有許多線程可能會進入休眠狀態,這些線程只是為了定期喚醒以輪詢更改或更新的狀態信息。  線程池,使您可以通過由系統管理的工作線程池來更有效地使用線程。 說得簡單一點,每新建一個線程都需要占用內存空間和其他資源,而新建了那麽多線程,有很多在休眠,或者在等待資源釋放;又有許多線程只是周期性的做一些小工作,如刷新數據等等,太浪費了,划不來,實際編程中大量線程突發,然後在短時間內結束的情況很少見。於是,就提出了線程池的概念。 線程池中的線程執行完指定的方法後並不會自動消除,而是以掛起狀態返回線程池,如果應用程序再次向線程池發出請求,那麽處以掛起狀態的線程就會被激活並執行任務,而不會創建新線程,這就節約了很多開銷 。只有當線程數達到最大線程數量,系統才會自動銷毀線程。因此,使用線程池可以避免大量的創建和銷毀的開支,具有更好的性能和穩定性,其次,開發人員把線程交給系統管理,可以集中精力處理其他任務。 3. 怎麽使用線程池? 其實線程池使用起來很簡單,如下 a.設置線程池最大最小: ThreadPool.SetMaxThreads ( int workerThreads, int completionPortThreads) 設置可以同時處於活動狀態的線程池的請求數目。所有大於此數目的請求將保持排隊狀態,直到線程池線程變為可用。還可以設置最小線程...