多執行緒的問題 |
尚未結案
|
Anakin
一般會員 發表:5 回覆:9 積分:2 註冊:2004-11-17 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
引言:好像在Delphi的文件中,有寫明一顆CPU不要開超過16條執行緒,是否有其他數據或文件中有更詳細的記載,謝謝有這樣的限制嗎? 如果您打開工作管理員,在 WinXP 下,有許多應用程式都開超過 16 條執行緒... 我也很想知道限制在那兒... 這是之前我提過的問題: ■【問題】Windows 系統允許執行緒數量的上限? http://delphi.ktop.com.tw/topic.php?TOPIC_ID=49849 引言: 會員 Chris.Net ---------------------------------------------------------------------createthread函數說明 在Remarks的第一段說明 每一個process能建立的thread上限是virtual memory的大小。 預設值是每一個thread佔1MB的stack空間,所以預設最多可以開2028個thread。調整預設的stack大小可以改變建立thread數量的上限。在這篇中,我也作了實驗,WindowsXP 大約就是只能開 2028... 吃軟也吃硬 dllee.ktop.com.tw StatPlus 系統資源監測器 @ KTOP OpenPLC - IEC 61131-3 geOShell XP Like 中文版
------
http://www.ViewMove.com |
Anakin
一般會員 發表:5 回覆:9 積分:2 註冊:2004-11-17 發送簡訊給我 |
感謝指教,因為最近比較忙,無法及時回應,不好意思
之前我也找過類似文件,像工作管理員中,一個程序開數個執行序是很平常,但我分析,由於這些都是Windows內部的運作,如偵測是否使用者有輸入,以便啟動螢幕程式....等,但因沒相關文件佐證,僅能猜測,不知有沒有那位前輩能指引那裡可找到相關文件,在此先謝了.
在微軟MSDN網站對執行緒也提到一些,像dllee兄所提可開到2028條,原文中皆有提到,但在也有一些提示,原文如下:
網址: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/multitasking.asp
Multitasking
A multitasking operating system divides the available processor time among the processes or threads that need it. The system is designed for preemptive multitasking; it allocates a processor time slice to each thread it executes. The currently executing thread is suspended when its time slice elapses, allowing another thread to run. When the system switches from one thread to another, it saves the context of the preempted thread and restores the saved context of the next thread in the queue.
The length of the time slice depends on the operating system and the processor. Because each time slice is small (approximately 20 milliseconds), multiple threads appear to be executing at the same time. This is actually the case on multiprocessor systems, where the executable threads are distributed among the available processors. However, you must use caution when using multiple threads in an application, because system performance can decrease if there are too many threads
故在實際編碼時,是否能一次開10條,或20條,似乎沒有任何的數據可參考,而MSDN所記載之2028條執行緒,我個人是解讀為不具效率下之最多執行緒,在實際生活上之運作,是不太可能如此做的.
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
有辦法實驗或實測嗎?
還是說... 隨人喊的呢?
或是說,電腦 CPU/MEM 等級高一點,那個數值就會高一點呢?
我是很好奇啦... 吃軟也吃硬 dllee.ktop.com.tw StatPlus 系統資源監測器 @ KTOP OpenPLC - IEC 61131-3 geOShell XP Like 中文版
------
http://www.ViewMove.com |
yyu10
中階會員 發表:9 回覆:99 積分:96 註冊:2005-02-18 發送簡訊給我 |
理论上的结论, 比如, 16绪, 30绪, 只是一个指导, 而不是一个约束. 这些结论都是建立在一定的假设上的, 而且是比较泛泛(general)的假设, 不一定适合个人面对的具体情况, 最好的方法还是写测试程式来找最佳值. 举个例子, 如果一个执行绪同时更新上千笔资料, 那么3~4个绪就可能使资料库满负荷(full load). 相反, 如果一个执行绪一次更新几笔资料, 那么可能可以同时运行30~40个执行绪. 换句话说, 这个最佳值与执行绪的结构, 功能有密切关系. 另外一个例子, 在你的电脑上打开Window Task Manager, 可以看到那些系统程式(system, svchost.exe, 等)每个都有50 绪. 将绪那一栏的数目加起来, 可以看到你的电脑上可能同时运行着200~300个绪! _________________________
Programming is a passion
|
Anakin
一般會員 發表:5 回覆:9 積分:2 註冊:2004-11-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |