簡體   English   中英

Windows和Linux最大線程

[英]Windows and linux max threads

Windows或Linux系統可以有多少個線程?

我正在編寫一個多線程可移植代碼,它應檢查系統中的最大線程數。

我很確定,如果你真的“需要知道這個”,你的設計就不好了。 所有現代操作系統都可以支持數千個線程。

限制通常更多地是關於可用內存和CPU資源,而不是“您可以在系統X中創建多少個線程” - 換句話說,如果您的線程實際執行某些操作,並且實際上使用的內存超過了內存,系統將運行在創建理論最大線程數之前內存不足。

例如,在我的機器上/proc/sys/kernel/threads-max超過250000 - 我的機器有16GB的ram,所以每個線程大約有64KB。 那就是如果所有內存實際上都可用於線程...其中一些內核代碼,文件系統緩沖區等。

因此,在任何實際術語中,內存將是您的限制,而不是系統可以支持的理論線程數。

對於Windows,TechNet有一篇文章由Mark Russinovich 推動Windows的限制:進程和線程 本文還鏈接到testlimit工具,該工具可讓您在系統上進行實驗。

TL; DR版本依賴於Windows版本,無論您運行的是32位還是64位Windows,以及您的應用程序是32位還是64位,以及32位程序是否正在鏈接您的程序為“大地址識別”(和/ 3GB NTLDR選項 )。 它也可能取決於ASLR 這取決於您是使用默認的線程堆棧保留大小,還是調整它。

在沒有/ 3GB開關的32位系統上運行的32位非大地址感知進程和默認的1meg堆棧保留將限制為最多2048個線程,但在此之前你很可能會達到內存限制。

對於具有調整后的堆棧大小的64位進程,您可以預期使用2GB內存達到40-50k線程。

無論如何,如果你甚至接近達到32位的限制,你就是做錯事(TM)。 您不希望在每個請求中使用帶有線程的阻塞I / O - 查看異步I / O和線程池(以及構建在這些上的所有花哨的抽象)。

Linux,這很簡單。 cat /proc/sys/kernel/threads-max

Windows,少一點。 基本上它取決於你有多少ram /你在每個線程的堆棧上分配多少 - 請參閱Windows Server 2003中的最大線程數是多少? ; 但基本上<1000

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM