全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2362
推到 Plurk!
推到 Facebook!

多執行緒的問題

尚未結案
Anakin
一般會員


發表:5
回覆:9
積分:2
註冊:2004-11-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-20 13:16:29 IP:61.219.xxx.xxx 未訂閱
請教有關在Delphi上開發多執行緒的問題: 若我想使用多執行緒的技巧,對遠端電腦做存取動作,每個執行緒負責對某一個點做存取,在這種情況下,是否有任何數據可以顯示,要開多少執行緒,才能有最大效能. 好像在Delphi的文件中,有寫明一顆CPU不要開超過16條執行緒,是否有其他數據或文件中有更詳細的記載,謝謝
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-20 14:59:18 IP:220.139.xxx.xxx 未訂閱
引言:好像在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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-22 09:56:20 IP:61.219.xxx.xxx 未訂閱
感謝指教,因為最近比較忙,無法及時回應,不好意思   之前我也找過類似文件,像工作管理員中,一個程序開數個執行序是很平常,但我分析,由於這些都是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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-22 15:23:06 IP:61.222.xxx.xxx 未訂閱
我記得是有這樣的敘述。 當執行緒的數量超過16個後,效率才會降低。 換而言之 16 個 算是最佳效能的範圍。 記得 李維 先生說:超過 30 個才會有明顯的效率降低。 咳!書讀了又忘。
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-22 21:19:54 IP:211.76.xxx.xxx 未訂閱
有辦法實驗或實測嗎? 還是說... 隨人喊的呢? 或是說,電腦 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-24 06:33:23 IP:220.244.xxx.xxx 未訂閱
理论上的结论, 比如, 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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-26 08:53:09 IP:61.219.xxx.xxx 未訂閱
看來也只有實驗一途了,不過,多執行緒運行在資料庫時,要注意的是死結(Dead Lock)的產生,尤其是DBF,DB,Access等File型資料庫. 在查訪時使用多執行緒的效率確實會比較好,但在做存取時,比較不建議用多執行緒,因為很可能同筆資料會被不同執行緒所修改,造成資料的紊亂,而造成事後查證的困難.
系統時間:2024-05-17 10:49:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!