線程池概述

線程池

一個線程池的工作線程代表應用程序的高效執行異步回調的集合。線程池主要用于減少應用程序線程的數量并提供工作線程的管理。應用程序可以對工作項進行排隊,將工作與可等待的句柄相關聯,根據計時器自動排隊,并與I / O綁定。

線程池架構

以下應用程序可以從使用線程池中受益:

  • 高度并行的應用程序,可以異步分派大量小工作項(例如分布式索引搜索或網絡I / O)。
  • 一個創建和銷毀大量線程的應用程序,每個線程都運行一小段時間。使用線程池可以降低線程管理的復雜性以及線程創建和銷毀所涉及的開銷。
  • 在后臺和并行處理獨立工作項的應用程序(例如加載多個選項卡)。
  • 必須對內核對象執行獨占等待或阻止對象上的傳入事件的應用程序。使用線程池可以減少線程管理的復雜性,并通過減少上下文切換的數量來提高性能。
  • 一個創建自定義服務器線程以等待事件的應用程序。

原始線程池已在Windows Vista中完全重新架構。新線程池得到改進,因為它提供單個工作線程類型(支持I / O和非I / O),不使用計時器線程,提供單個計時器隊列,并提供專用的持久線程。它還提供清理組,更高的性能,獨立調度的每個進程的多個池以及新的線程池API。

線程池架構包括以下內容:

  • 執行回調函數的工作線程
  • 等待多個等待句柄的服務員線程
  • 工作隊列
  • 每個進程的默認線程池

最佳實踐

新的線程池API比原始線程池API提供更多的靈活性和控制。但是,有一些微妙但重要的差異。在原始API中,等待重置是自動的; 在新的API中,每次都必須顯式重置等待。原始API自動處理模擬,將調用進程的安全上下文傳遞給線程。使用新API,應用程序必須顯式設置安全上下文。

以下是使用線程池時的最佳做法:

  • 進程的線程共享線程池。單個工作線程可以一次執行多個回調函數。這些工作線程由線程池管理。因此,不要通過在線程上調用TerminateThread或通過從回調函數調用ExitThread來終止線程池中的線程。
  • I / O請求可以在線程池中的任何線程上運行。取消線程池線程上的I / O需要同步,因為取消功能可能在與處理I /
    O請求的線程不同的線程上運行,這可能導致取消未知操作。為避免這種情況,請始終提供OVERLAPPED結構,在為異步I / O
    調用CancelIoEx時啟動I / O請求,或使用您自己的同步確保在調用之前不能在目標線程上啟動其他I /
    O.在CancelSynchronousIo或CancelIoEx功能。
  • 在從函數返回之前清除在回調函數中創建的所有資源。這些包括TLS,安全上下文,線程優先級和COM注冊。回調函數還必須在返回之前恢復線程狀態。
  • 保持等待句柄及其關聯對象保持活動狀態,直到線程池發出信號表示已完成句柄為止。
  • 標記正在等待冗長操作的所有線程(例如I / O刷新或資源清理),以便線程池可以分配新線程而不是等待這個線程。
  • 在卸載使用線程池的DLL之前,取消所有工作項,I / O,等待操作和計時器,并等待執行回調。
  • 通過消除工作項之間和回調之間的依賴關系,確保回調不等待自身完成,以及保留線程優先級,避免死鎖。
  • 在使用默認線程池的其他組件的進程中,不要太快地排隊太多項目。每個進程有一個默認線程池,包括Svchost.exe。默認情況下,每個線程池最多包含500個工作線程。當處于就緒/運行狀態的工作線程數必須小于處理器數時,線程池會嘗試創建更多工作線程。
  • 避免使用COM單線程單元模型,因為它與線程池不兼容。STA創建線程狀態,可以影響線程的下一個工作項。STA通常是長期存在的并且具有線程親和性,這與線程池相反。
  • 創建新的線程池以控制線程優先級和隔離,創建自定義特征,并可能提高響應能力。但是,其他線程池需要更多系統資源(線程,內核內存)。池太多會增加CPU爭用的可能性。
  • 如果可能,使用可等待的對象而不是基于APC的機制來發出線程池線程的信號。APC與其他信令機制的線程池線程不兼容,因為系統控制線程池線程的生命周期,因此可以在傳遞通知之前終止線程。
  • 使用線程池調試器擴展名!tp。此命令具有以下用法:
    • 池地址 標志
    • obj 地址 標志
    • tqueue
    • 地址
    • 標志
    • 服務員地址
    • 工人地址
      對于pool,waiter和worker,如果地址為零,則命令將轉儲所有對象。對于服務員和工作人員,省略地址會轉儲當前線程。定義了以下標志:0x1(單行輸出),0x2(轉儲成員)和0x4(轉儲池工作隊列)。

相關話題

線程池API

使用線程池功能

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448204.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448204.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448204.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WEB 請求處理二:Nginx 請求 反向代理

上一篇《WEB請求處理一:瀏覽器請求發起處理》,我們講述了瀏覽器端請求發起過程,通過DNS域名解析服務器IP,并建立TCP連接,發送HTTP請求。本文將講述請求到達反向代理服務器的一個處理過程,比如:在…

方向盤的正確駕馭方法

如果問您油門踏板和方向盤哪個與駕駛員最“親密”,您會選擇誰呢?恐怕還是方向盤吧。如果汽車行駛過程中您的雙手同時離開了方向盤,那么事故的隱患也就隨之而來。下面我們就為您全面介紹汽車方向盤的正確使用方法。專家介紹,握方向…

SQL server 2005中無法新建作業(Job)的問題

客戶端是使用企業管理其(Management Studio)新建job,總是無法創建,查找了很多資料,有的說是需要sp2, 但有的又說不是... ... 沒有時間去研究為什么,但確有一種方法解決:到服務器端去創建job&…

線程池API

線程池API 線程池應用程序編程接口(API)使用基于對象的設計。以下每個對象都由用戶模式數據結構表示: 池對象是一組可用于執行工作的工作線程。每個進程可以根據需要創建具有不同特征的多個隔離池。每個進程都有一個默認池。清理組與一組回…

WEB 請求處理 一:瀏覽器 請求發起處理

最近,終于要把《WEB請求處理系列》提上日程了,一直答應小伙伴們給分享一套完整的WEB請求處理流程:從瀏覽器、Nginx、Servlet容器,最終到應用程序WEB請求的一個處理流程,前段時間由于其他工作事情的安排,一直…

離合器半聯動探秘

離合器踏板作用是切斷發動機和變速箱之間的動力,有利于起步、變速、和停車。那么如何更好的使用它呢? 離合器的五種狀態示意圖 離合器半聯動的使用方法揭密如下: 離合器半聯動的使用探密之一 將離合器抬到車開始動時你就別再抬了,…

Biztalk Server 2006安裝配置

前段時間收到了來自beta.microsoft.com的BTS20006 Beta2的下載地址,這兩天對它進行了一番安裝配置。下面把一些經過和步驟和大家分享一下,手中有一些去年的Biztalk Server2004版本的培訓資料,里面有11個Lab。需要的朋友請留下mail&#xff0c…

apache 官方 Dubbo 文檔

只是分享、記錄一下 dubbo 的文檔地址:apache 官方 Dubbo 文檔 其頁面內容如下:(我是用 chrome 直接右鍵翻譯的,原文檔是英文的)

制動踏板是什么?

制動踏板就是腳剎(行車制動器)的踏板,使運行中的機車、車輛及其他運輸工具或機械等停止或減低速度的動作。制動的一般原理是在機器的高速軸上固定一個輪或盤,在機座上安裝與之相適應的閘瓦、帶或盤,在外力作用下使之產…

CSS Framework 960 Grid System (收)

CSS框架 :960 Grid System 官網:http://960.gs/ 什么是框架?框架是一種你能夠使用在你的web項目中概念上的結構。CSS框架一般是CSS文件的集合,包括基本風格的字體排版,表單樣式,表格布局等等,比…

使用線程本地存儲

線程本地存儲(TLS)使同一進程的多個線程能夠使用由TlsAlloc函數分配的索引來存儲和檢索線程本地的值。在此示例中,在進程啟動時分配索引。當每個線程啟動時,它會分配一個動態內存塊,并使用TlsSetValue函數在TLS槽中存儲…

發動機的工作原理,你知道嗎?

http://auto.jxedt.com/info/5352.htm 發動機是汽車的動力裝置,性能優劣直接影響到汽車性能,發動機的類型很多,結構各異,以適應不同車型的需要。按發動機使用燃料劃分,可分成汽油發動機和柴油發動機等類別。按發動機汽…

官方文檔: Dubbo 框架設計、模塊說明、依賴關系

以下內容全文轉自 apache 官方 dubbo文檔:http://dubbo.apache.org/en-us/docs/dev/design.html 框架設計 圖片描述: 淺藍色背景的左側區域顯示服務用戶界面,淺綠色背景的右側區域顯示服務提供者界面,中心區域顯示兩個側面界面。…

那些花兒

今天上海下雨了,心緒也變得低落,突然很想念宿舍的姐妹。畢業后就自作聰明地和她們失去了聯系,今天去QQ群遛了一圈。虹結婚了,敏還是活得那么瀟灑,笑也在努力地生活... 人生啊!總是在向前走,遇…

CreateRemoteThread函數

CreateRemoteThread函數 創建在另一個進程的虛擬地址空間中運行的線程。 使用CreateRemoteThreadEx函數創建在另一個進程的虛擬地址空間中運行的線程,并可選擇指定擴展屬性。 語法 HANDLE CreateRemoteThread(HANDLE hProcess,LPSECURITY_ATTRI…

防火墻問題 Linux系統 /etc/sysconfig/路徑下無iptables文件

虛擬機新裝了一個CentOs7,然后做防火墻配置的時候找不到iptables文件,解決方法如下: 因為默認使用的是firewall作為防火墻,把他停掉裝個iptable systemctl stop firewalld systemctl mask firewalld yum install -y iptables yum …

如果風 知道 ... 如果云 知道 ...

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 //《心靈之音》----- Bandari 來自酷狗。 一直很喜歡聽歌: 喜歡默默的聽、一個人安安靜靜的聽、長長久久的聽、聽得忘乎所…

切記!這樣洗頭最傷身

各種的忙碌已經成為了現代人生活中的一個標志,每天的加班,玩樂到深夜,游戲等,都讓不少的人的洗澡時間都只能在臨睡前,而女人洗頭也只能在晚上臨睡之前洗。如果可以有足夠的時間,等待頭發完全干透了之后&…

可以供MFC調用的,QT實現的DLL(qtwinmigrate實現)

MFC和QT的消息循環機制不同&#xff0c;所以&#xff0c;要讓QT寫的DLL可以供MFC調用&#xff0c;要做一點特殊的處理 #include <qmfcapp.h> #include <qwinwidget.h> #include <QtGui>#include <QtGui/QMessageBox> #include <windows.h> #incl…

離合器的操作技巧

學車其實不難&#xff0c;學車最基本的幾個操作&#xff0c;打方向盤、踩離合、踩剎車、換檔位都是學員需要必學的基本操作&#xff0c;在網絡駕校上有學員反應&#xff0c;對離合器的操作比較難&#xff0c;經常錯誤操作造成熄火等現象&#xff0c;現在瀘州駕校論壇小編整理了…