線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1473
推到 Plurk!
推到 Facebook!

請問要使用多核心同時parse多個檔案之方法

 
macchen
初階會員


發表:66
回覆:102
積分:33
註冊:2006-07-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-08-18 17:35:59 IP:219.87.xxx.xxx 訂閱
請問一下各位,我的目的是要使用多核心同時parse多個檔案,請問我該如何規畫呢,可行性可行嗎?目前的想法是先依照要parse的檔案數去分配幾個核心(n核心),然後分別使用n條thread來執行,則mainthread則做無窮迴圈等待所有的檔案都parse完畢,則結束程式,因為檔案可能是n核心的倍數,所以這部份還不知如何做會比較好,麻煩有經驗的人指導一下小弟,或給觀念給小弟也可以,謝謝您的觀看。
------
DELPHI初學者
mephise
高階會員


發表:4
回覆:149
積分:205
註冊:2004-02-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-08-19 11:15:04 IP:210.69.xxx.xxx 訂閱
不管是多核心還是多CPU, 據我所知這些都是由作業系統分配的
如果要處理多個檔案, 只要專注在 Multi-Thread 的處理即可

===================引 用 macchen 文 章===================
請問一下各位,我的目的是要使用多核心同時parse多個檔案,請問我該如何規畫呢,可行性可行嗎?目前的想法是先依照要parse的檔案數去分配幾個核心(n核心),然後分別使用n條thread來執行,則mainthread則做無窮迴圈等待所有的檔案都parse完畢,則結束程式,因為檔案可能是n核心的倍數,所以這部份還不知如何做會比較好,麻煩有經驗的人指導一下小弟,或給觀念給小弟也可以,謝謝您的觀看。
------
Mephise Chen
前興德工程師
macchen
初階會員


發表:66
回覆:102
積分:33
註冊:2006-07-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-08-22 15:08:54 IP:219.87.xxx.xxx 訂閱
感謝回覆。
請問一下,我將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 引用回覆 回覆 發表時間:2011-08-22 20:56:09 IP:220.137.xxx.xxx 訂閱
解答不敢當, 我只能提出我的見解, 也不保證一定是對的
當你跑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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-08-23 15:24:40 IP:219.87.xxx.xxx 訂閱
感謝回覆。
正常開多個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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-08-23 20:34:59 IP:220.137.xxx.xxx 訂閱
也不是這麼說, 我2009年曾經寫過一個程式, 開了57個 Thread 來處理 Socket(聆聽57個Port)
直到程式結束為止, 這些 Thread 都不會被釋放, CPU也只在30-40%左右
每個Thread在每一秒都會有資料進來, 在快速處理結束之後然後 Idle

根據我的經驗, 在Windows系統下, 只要跑到6,70%
系統就會嚴重變慢, 要重新檢討架構, 尋求能以較低消耗CPU的方式來執行

------
Mephise Chen
前興德工程師
macchen
初階會員


發表:66
回覆:102
積分:33
註冊:2006-07-07

發送簡訊給我
#7 引用回覆 回覆 發表時間:2011-08-24 08:45:11 IP:219.87.xxx.xxx 訂閱
感謝回覆。
嗯,也許cpu有沒有跑到100%無所謂,因為我的目的只是要時間變短而已,所以才會想到用multithread因為多工同時處理,但是就是想不到是否還有別的方式可以增加速度了,因為之前做過一些程式碼改進了,但是還是希望加速程式轉檔的時間,也許有別的方式,但目前的寫法應該是我知道的最好方式,所以才會想試試multithread有沒有辦法增加速度,謝謝,或是可以指導小弟一個方向,感謝您的回覆。
===================引 用 mephise 文 章===================
也不是這麼說, 我2009年曾經寫過一個程式, 開了57個 Thread 來處理 Socket(聆聽57個Port)
直到程式結束為止, 這些 Thread 都不會被釋放, CPU也只在30-40%左右
每個Thread在每一秒都會有資料進來, 在快速處理結束之後然後 Idle

根據我的經驗, 在Windows系統下, 只要跑到6,70%
系統就會嚴重變慢, 要重新檢討架構, 尋求能以較低消耗CPU的方式來執行

------
DELPHI初學者
系統時間:2024-07-02 16:11:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!