請問要使用多核心同時parse多個檔案之方法 |
|
macchen
初階會員 ![]() ![]() 發表:66 回覆:102 積分:33 註冊:2006-07-07 發送簡訊給我 |
|
mephise
高階會員 ![]() ![]() ![]() ![]() 發表:4 回覆:149 積分:205 註冊:2004-02-09 發送簡訊給我 |
不管是多核心還是多CPU, 據我所知這些都是由作業系統分配的
如果要處理多個檔案, 只要專注在 Multi-Thread 的處理即可 ===================引 用 macchen 文 章=================== 請問一下各位,我的目的是要使用多核心同時parse多個檔案,請問我該如何規畫呢,可行性可行嗎?目前的想法是先依照要parse的檔案數去分配幾個核心(n核心),然後分別使用n條thread來執行,則mainthread則做無窮迴圈等待所有的檔案都parse完畢,則結束程式,因為檔案可能是n核心的倍數,所以這部份還不知如何做會比較好,麻煩有經驗的人指導一下小弟,或給觀念給小弟也可以,謝謝您的觀看。
------
Mephise Chen 前興德工程師 |
macchen
初階會員 ![]() ![]() 發表:66 回覆:102 積分:33 註冊:2006-07-07 發送簡訊給我 |
感謝回覆。
請問一下,我將parse分成多個thread來執行,可是在執行多個thread時,例如一次開二個thread與四個thread時,會比單thread快一點,但是如果一次開超過四個以上的,卻比單thread的時候要慢,不知是不是我觀念錯誤造成的,因為在parse完所有的檔案時,需做檔案同步,所以有加了criticalsession做控管,但不知是不是因為thread開太多造成context switch時間過久(理論上這個應該很短才對的呢??),還是程式寫法有問題造成速度變慢,再麻煩mephise幫忙小弟一下,謝謝。 ===================引 用 mephise 文 章=================== 不管是多核心還是多CPU, 據我所知這些都是由作業系統分配的 如果要處理多個檔案, 只要專注在 Multi-Thread 的處理即可
------
DELPHI初學者 |
mephise
高階會員 ![]() ![]() ![]() ![]() 發表:4 回覆:149 積分:205 註冊:2004-02-09 發送簡訊給我 |
解答不敢當, 我只能提出我的見解, 也不保證一定是對的
當你跑4個以上的Thread時, 請問CPU的負載是多少呢? 如果非常高, 那表示機器本身已經無法負擔 許多的伺服器都會有 Thread Pool, 請問可以無上限的開嗎? 這樣的下場只會變成大家都在等待而已, 並且CPU要在許多Thread中切換, 畢竟CPU的能力是有限的 Thread 的使用最好使用於能夠在"很短"的時間之內完成(忘了在哪看到這句的, 好像是Delphi Developer's Guide), 所謂的很短, 也許應該低於500ms吧 比如說, 我在Windows下同時搬動兩個10G檔案(簡單的複製貼上), 此時應該是在多工環境下搬動吧! 實際上我往往發現所需要的時間會比先搬完一個, 再搬另一個還要長, 也許這能解釋您的狀況 PS. 我很好奇 Parse單一檔案時需要多少時間 ===================引 用 macchen 文 章=================== 感謝回覆。 請問一下,我將parse分成多個thread來執行,可是在執行多個thread時,例如一次開二個thread與四個thread時,會比單thread快一點,但是如果一次開超過四個以上的,卻比單thread的時候要慢,不知是不是我觀念錯誤造成的,因為在parse完所有的檔案時,需做檔案同步,所以有加了criticalsession做控管,但不知是不是因為thread開太多造成context switch時間過久(理論上這個應該很短才對的呢??),還是程式寫法有問題造成速度變慢,再麻煩mephise幫忙小弟一下,謝謝。 ===================引 用 mephise 文 章=================== 不管是多核心還是多CPU, 據我所知這些都是由作業系統分配的 如果要處理多個檔案, 只要專注在 Multi-Thread 的處理即可
------
Mephise Chen 前興德工程師 |
macchen
初階會員 ![]() ![]() 發表:66 回覆:102 積分:33 註冊:2006-07-07 發送簡訊給我 |
感謝回覆。
正常開多個thread不是都會讓cpu執行成為100%嗎?不然cpu都只有50%在執行(雙核)25%(四核)的執行而已?? 我是因為需要再將parse檔案的速度再加快,所以才會想用multithread讓cpu滿載,因為理論上每一個檔案之間是沒有關聯的,所以才會想用multithread的方式來處理(不知這想法有沒有問題). 解一個檔案快則1秒,慢則10秒,不一定,但是因為同時需解10個左右的檔案,時間就會變長,所以才會想說可不可以同時進度多檔的處理,謝謝。 ===================引 用 mephise 文 章=================== 解答不敢當, 我只能提出我的見解, 也不保證一定是對的 當你跑4個以上的Thread時, 請問CPU的負載是多少呢? 如果非常高, 那表示機器本身已經無法負擔 許多的伺服器都會有 Thread Pool, 請問可以無上限的開嗎? 這樣的下場只會變成大家都在等待而已, 並且CPU要在許多Thread中切換, 畢竟CPU的能力是有限的 Thread 的使用最好使用於能夠在"很短"的時間之內完成(忘了在哪看到這句的, 好像是Delphi Developer's Guide), 所謂的很短, 也許應該低於500ms吧 比如說, 我在Windows下同時搬動兩個10G檔案(簡單的複製貼上), 此時應該是在多工環境下搬動吧! 實際上我往往發現所需要的時間會比先搬完一個, 再搬另一個還要長, 也許這能解釋您的狀況 PS. 我很好奇 Parse單一檔案時需要多少時間
------
DELPHI初學者 |
mephise
高階會員 ![]() ![]() ![]() ![]() 發表:4 回覆:149 積分:205 註冊:2004-02-09 發送簡訊給我 |
|
macchen
初階會員 ![]() ![]() 發表:66 回覆:102 積分:33 註冊:2006-07-07 發送簡訊給我 |
感謝回覆。
嗯,也許cpu有沒有跑到100%無所謂,因為我的目的只是要時間變短而已,所以才會想到用multithread因為多工同時處理,但是就是想不到是否還有別的方式可以增加速度了,因為之前做過一些程式碼改進了,但是還是希望加速程式轉檔的時間,也許有別的方式,但目前的寫法應該是我知道的最好方式,所以才會想試試multithread有沒有辦法增加速度,謝謝,或是可以指導小弟一個方向,感謝您的回覆。 ===================引 用 mephise 文 章=================== 也不是這麼說, 我2009年曾經寫過一個程式, 開了57個 Thread 來處理 Socket(聆聽57個Port) 直到程式結束為止, 這些 Thread 都不會被釋放, CPU也只在30-40%左右 每個Thread在每一秒都會有資料進來, 在快速處理結束之後然後 Idle 根據我的經驗, 在Windows系統下, 只要跑到6,70% 系統就會嚴重變慢, 要重新檢討架構, 尋求能以較低消耗CPU的方式來執行
------
DELPHI初學者 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |