JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java SE 討論區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友   
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 Thread 的最主要功用???
honeyaaa





發文: 159
積分: 0
於 2008-05-06 17:19 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
各位大哥,在我認知裡,之所以會用multi-thread主要是為了共用資源,且讓程式可以同時執行多件事,並利用一下等待的時間處理其他事情。

但是最近在寫Socket的程式,有人跟我堅持說開50個multi-thread理論值會接近比單一處理快50倍,但是我認為並不是這樣,不知道各位大大的想法??


honeyaaa edited on 2008-05-07 00:57
reply to postreply to post
努力,是成功唯一的途徑。
作者 Re:Thread 的最主要功用??? [Re:honeyaaa]
hkdennis2k





發文: 1926
積分: 6
於 2008-05-06 21:02 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
不, 用 multi-thread 主要絕對不是為了共用資源

reply to postreply to post
1. Programming is not coding

2. Learning Java is not leaning Java syntax

3. Study, not wait for be taught

4. Answer to yourself, not ask somebody else

5. Code is poetry

---
6. 我跑去寫 C# 了....

---
7. 回到 Java, PHP 還有 servers farm
---
8. 很久沒有寫 Java 了, 倒
作者 Re:Thread 的最主要功用??? [Re:hkdennis2k]
honeyaaa





發文: 159
積分: 0
於 2008-05-06 21:47 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
hkdennis2k wrote:
不, 用 multi-thread 主要絕對不是為了共用資源


對不起,小弟說錯了,我的意思在於說開啟執行緒,主要是用於多工,比方我們在開啟
SocketServer時,實際上開啟一個Service並且等待接受到Socket時在可經由multi-Thread的
模式去做Session的處理,但是,如果我開100個Thread,那處理的速度會比開1個Thread快
接近100倍嗎?

以下為小弟的認知--------------------------
雖然Thread可以同時間處理多筆,但實際上其實只有一筆(只是時間很快),開啟multi-Thread會快的原因,是因為時間差嗎?


reply to postreply to post
努力,是成功唯一的途徑。
作者 Re:Thread 的最主要功用??? [Re:honeyaaa]
JiaYun



版主

發文: 761
積分: 9
於 2008-05-06 22:05 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
honeyaaa wrote:
如果我開100個Thread,那處理的速度會比開1個Thread快接近100倍嗎?


開 100 個 thread 你的 CPU 就會變成 100 倍快嗎....

我覺得你還是去找本作業系統的書好好看一看


reply to postreply to post
作者 Re:Thread 的最主要功用??? [Re:honeyaaa]
sam_huang74_pc





發文: 13
積分: 0
於 2008-05-06 22:34 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
MultiThread 基本上會牽涉到 OS 跟 CPU...等等的運作,所以他並不等同於開越多速度越快,甚至如果開太多反而會造成Thread之間轉換所造成的效能耗損,所以我的建議是實際上去測試一下會比較準.尤其在PC跟SERVER上就有很大的差別.

reply to postreply to post
作者 Re:Thread 的最主要功用??? [Re:JiaYun]
honeyaaa





發文: 159
積分: 0
於 2008-05-06 23:19 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
JiaYun wrote:
開 100 個 thread 你的 CPU 就會變成 100 倍快嗎....

我覺得你還是去找本作業系統的書好好看一看


是阿,我也堅決認為不是阿,但是我和別人講,別人聽不懂,一直認為開50條Thread就是會快
將近50倍,我寫的程式一直被否定不是multi-Thread,原因就是速度太慢,沒有快到一定的倍數。再來就是被認為開Thread處理事情,被認定開50個Thread同時開始執行,就會同時結束。
唉...我快被打敗了。

可能是我的表達能力太差,或是我的觀念有誤,還懇請各位大大指點。


reply to postreply to post
努力,是成功唯一的途徑。
作者 Re:Thread 的最主要功用??? [Re:sam_huang74_pc]
honeyaaa





發文: 159
積分: 0
於 2008-05-06 23:22 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
sam_huang74_pc wrote:
MultiThread 基本上會牽涉到 OS 跟 CPU...等等的運作,所以他並不等同於開越多速度越快,甚至如果開太多反而會造成Thread之間轉換所造成的效能耗損,所以我的建議是實際上去測試一下會比較準.尤其在PC跟SERVER上就有很大的差別.


了解,不止除了OS和CPU會影響之外,我寫的SokcetServer還會有網路速度上的考量,還要連結DBServer和ApServer的考量,不知道要怎麼測試才能達到最穩定和最優化Thread的數量。Sad


reply to postreply to post
努力,是成功唯一的途徑。
作者 Re:Thread 的最主要功用??? [Re:honeyaaa]
Duncan

還隱隱作痛

版主

發文: 7816
積分: 39
於 2008-05-06 23:31 user profilesend a private message to usersend email to Duncanreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
honeyaaa wrote:
各位大哥,在我認知裡,之所以會用multi-thread主要是為了共用資源,且讓程式可以同時執行多件事,並利用一下等待的時間處理其他事情。

但是最近在寫Socket的程式,同事堅持開50個multi-thread理論值會接近比單一處理快50倍,但是我認為並不是這樣,不知道各位大大的想法??


假如不考慮 multi-task 操作在 OS 層面的額外成本,multi-task 去執行一個任務會不會比單一 task 來作來的快,還得看 I/O 或更廣義地說是 resource 的使用情形。

比如說,假如一定要用洗衣機洗衣服,在只有一台洗衣機(resource, I/O)的情況下,一個人洗 50 份衣物(假設一台洗衣機的負載剛好是一份衣物),跟 50 個人同時並進來洗自己所持有的一份衣物,何者會比較快完成 50 份衣物的清洗?假如衣物是用手洗呢?


reply to postreply to post

給我
辣味豆腐 其餘免談
作者 Re:Thread 的最主要功用??? [Re:Duncan]
honeyaaa





發文: 159
積分: 0
於 2008-05-06 23:52 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Duncan wrote:
假如不考慮 multi-task 操作在 OS 層面的額外成本,multi-task 去執行一個任務會不會比單一 task 來作來的快,還得看 I/O 或更廣義地說是 resource 的使用情形。

比如說,假如一定要用洗衣機洗衣服,在只有一台洗衣機(resource, I/O)的情況下,一個人洗 50 份衣物(假設一台洗衣機的負載剛好是一份衣物),跟 50 個人同時並進來洗自己所持有的一份衣物,何者會比較快完成 50 份衣物的清洗?假如衣物是用手洗呢?


我自己的最原意,不考慮其他OS和Network的狀況,那執行多執行緒的意義是在於排程依序的執行task,用意是不會將花費集中再某一個process上。
就好比您舉例的洗衣服來說,假如說1件1件洗和同時開始洗50件理論上會是一樣。但是我們再加上脫水的時間,當你一件一件做從准備洗衣-洗衣-脫水 再換下一件衣服反覆,和你同時開始洗50件衣服,一次準備好洗衣-洗1件衣服-脫水-利用脫水的時間在洗下1件,我想,multi-Thread最主要的時間就是會快在可在洗衣服的同時,還能脫水,但是並不會真的快到50倍的效率。


reply to postreply to post
努力,是成功唯一的途徑。
作者 Re:Thread 的最主要功用??? [Re:honeyaaa]
Duncan

還隱隱作痛

版主

發文: 7816
積分: 39
於 2008-05-07 00:32 user profilesend a private message to usersend email to Duncanreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
honeyaaa wrote:
我自己的最原意,不考慮其他OS和Network的狀況,那執行多執行緒的意義是在於排程依序的執行task,用意是不會將花費集中再某一個process上。
就好比您舉例的洗衣服來說,假如說1件1件洗和同時開始洗50件理論上會是一樣。但是我們再加上脫水的時間,當你一件一件做從准備洗衣-洗衣-脫水 再換下一件衣服反覆,和你同時開始洗50件衣服,一次準備好洗衣-洗1件衣服-脫水-利用脫水的時間在洗下1件,我想,multi-Thread最主要的時間就是會快在可在洗衣服的同時,還能脫水,但是並不會真的快到50倍的效率。


你提到的是 pipeline 的概念,但我覺得不適合拿來比喻 multi-task(一個人洗衣服還是可以同時利用一台洗衣機洗衣,一台烘衣機來烘衣)。我是把多人同時做事比喻為 multi-task,洗衣機則是有限的資源或是有限的 I/O 能力。

一個任務該以 single-task 方式還是 multi-task 方式來運作,除了整體上的效能外,還要考慮 runtime 表現何者較適合應用需求而定。你提到你的 server 只用 single thread 來接受 client 連結(包括後續操作),如果以數據的傳輸量來說,多個 thread 同時處理多個 client 可能在整體的數據傳輸效率上好不了多少(這還得考慮很多因素),但是假如一個 client 建立的 session 是很花時間的,我想多數的應用都不會接受這種一個 client 服務完才服務下一個 client 的行為(FTP server 如果這樣搞,你受的了嗎?)。反過來說如果你能使用單一 thread 而對多個 connection 分時作 I/O,使用單一 thread 並沒有什麼不好。


Duncan edited on 2008-05-07 00:39
reply to postreply to post

給我
辣味豆腐 其餘免談
作者 Re:Thread 的最主要功用??? [Re:Duncan]
honeyaaa





發文: 159
積分: 0
於 2008-05-07 00:54 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Duncan wrote:
你提到的是 pipeline 的概念,但我覺得不適合拿來比喻 multi-task(一個人洗衣服還是可以同時利用一台洗衣機洗衣,一台烘衣機來烘衣)。我是把多人同時做事比喻為 multi-task,洗衣機則是有限的資源或是有限的 I/O 能力。

一個任務該以 single-task 方式還是 multi-task 方式來運作,除了整體上的效能外,還要考慮 runtime 表現何者較適合應用需求而定。你提到你的 server 只用 single thread 來接受 client 連結(包括後續操作),如果以數據的傳輸量來說,多個 thread 同時處理多個 client 可能在整體的數據傳輸效率上好不了多少(這還得考慮很多因素),但是假如一個 client 建立的 session 是很花時間的,我想多數的應用都不會接受這種一個 client 服務完才服務下一個 client 的行為(FTP server 如果這樣搞,你受的了嗎?)。反過來說如果你能使用單一 thread 而對多個 connection 分時作 I/O,使用單一 thread 並沒有什麼不好。


其實您提到我的重點了,"多個 thread 同時處理多個 client 可能在整體的數據傳輸效率上好不了多少",這socket使用multi-thread主要的還是在於能同時接受多筆Client端所傳送的資訊,但實際上還是依序在執行,所以在效率上其實並不會快到哪裡去。我提出您所說的pipeline概念,也只是用來說明,multi-Thread在某種意義上,所能增進的些許效率(但所增加的效率,並不是如果別人和我說的會增快到n倍)。

感謝各位大大的指導,如小弟由嚴重觀念偏差,請用力的鞭吧 XD


honeyaaa edited on 2008-05-07 00:59
reply to postreply to post
努力,是成功唯一的途徑。
作者 Re:Thread 的最主要功用??? [Re:honeyaaa]
Duncan

還隱隱作痛

版主

發文: 7816
積分: 39
於 2008-05-07 00:58 user profilesend a private message to usersend email to Duncanreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
honeyaaa wrote:
其實您提到我的重點了,"多個 thread 同時處理多個 client 可能在整體的數據傳輸效率上好不了多少",這socket使用multi-thread主要的還是在於能同時接受多筆Client端所傳送的資訊,但實際上還是依序在執行,所以在效率上其實並不會快到哪裡去。我提出您所說的pipeline概念,也只是用來說明,multi-Thread在某種意義上,所能增進的些許效率。

感謝各位大大的指導,如小弟由嚴重觀念偏差,請用力的鞭吧 XD


多個 thread 同時服務多個 client 與一個 thread 依序服務所有的 client,在數據傳輸上的效率要考慮的因素還很多,比如頻寬的分佈(即使 server 的頻寬極大,只要有一個 client 的頻寬很小,在單 thread 依序服務的作法下也會大大拉低效能)。

但我的重點是:效率不是唯一的考量。(我提到你能接受一個 FTP server 一旦有 client 連接上之後必須要等到這個 client 把要下載/上載的數據傳完才服務下一個 client 的這種表現嗎?就是這個意思)


Duncan edited on 2008-05-07 01:04
reply to postreply to post

給我
辣味豆腐 其餘免談
作者 Re:Thread 的最主要功用??? [Re:Duncan]
honeyaaa





發文: 159
積分: 0
於 2008-05-07 01:04 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Duncan wrote:
但我的重點是:效率不是唯一的考量。(我提到你能接受一個 FTP server 一旦有 client 連接上之後必須要等到這個 client 把要下載/上載的數據傳完才服務下一個 client 的這種表現嗎?就是這個意思)


是的,就如您所說的,這是Server開multi-thread最主要的功用,呼。受教

老實說,我在和別人解說multi-thread功用時,已經快變成爭論了 >.<
(因為別人一直拿效率點來爭論)
我一直提到開在多的Thread再同一時間只有執行一件事,所以不可能有快n倍這種觀念,
並且也一直在說明就算快也是只有快在時間差,(因為別人一直拿效率點來爭論),
卻忘了最簡單也最重要的意義。


honeyaaa edited on 2008-05-07 01:06
reply to postreply to post
努力,是成功唯一的途徑。
作者 Re:Thread 的最主要功用??? [Re:honeyaaa]
psychokiller





發文: 581
積分: 1
於 2008-05-07 02:20 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
honeyaaa wrote:
是的,就如您所說的,這是Server開multi-thread最主要的功用,呼。受教

老實說,我在和別人解說multi-thread功用時,已經快變成爭論了 >.<
(因為別人一直拿效率點來爭論)
我一直提到開在多的Thread再同一時間只有執行一件事,所以不可能有快n倍這種觀念,
並且也一直在說明就算快也是只有快在時間差,(因為別人一直拿效率點來爭論),
卻忘了最簡單也最重要的意義。

可能會快點
因為有時候會block
那時cpu 就在空轉中
不能做別的事
比如說等client 送資料過來這樣


reply to postreply to post
作者 Re:Thread 的最主要功用??? [Re:honeyaaa]
Duncan

還隱隱作痛

版主

發文: 7816
積分: 39
於 2008-05-07 10:17 user profilesend a private message to usersend email to Duncanreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
honeyaaa wrote:
是的,就如您所說的,這是Server開multi-thread最主要的功用,呼。受教

老實說,我在和別人解說multi-thread功用時,已經快變成爭論了 >.<
(因為別人一直拿效率點來爭論)
我一直提到開在多的Thread再同一時間只有執行一件事,所以不可能有快n倍這種觀念,
並且也一直在說明就算快也是只有快在時間差,(因為別人一直拿效率點來爭論),
卻忘了最簡單也最重要的意義。


請不要只用 pipeline 的概念思考這個主題,multi-task 不是只有快在時間差。


reply to postreply to post

給我
辣味豆腐 其餘免談
作者 Re:Thread 的最主要功用??? [Re:Duncan]
honeyaaa





發文: 159
積分: 0
於 2008-05-08 21:36 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Duncan wrote:
請不要只用 pipeline 的概念思考這個主題,multi-task 不是只有快在時間差。


感謝回覆,我會好好思考。


reply to postreply to post
努力,是成功唯一的途徑。
作者 Re:Thread 的最主要功用??? [Re:honeyaaa]
honeyaaa





發文: 159
積分: 0
於 2008-05-09 11:51 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我換各方式問好了,
先假設在單核心的電腦開啟一個Thread平均處理需花1秒

使用multi-Thread開始50個Thread同時執行,第一筆開始和
最後一筆結束的時間

(1) 1秒
(2) 遠大於50秒
(3) 遠小於50秒
(4) 約等於50秒

我個人認為是要(4)約等於50秒
不知道各位大大的意思?


honeyaaa edited on 2008-05-09 22:10
reply to postreply to post
努力,是成功唯一的途徑。
作者 Re:Thread 的最主要功用??? [Re:honeyaaa]
jamestian





發文: 250
積分: 0
於 2008-05-09 14:58 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
honeyaaa wrote:
我換各方式問好了,
先假設在單核心的電腦開啟一個Thread平均處理需花1秒

使用multi-Thread開始50個Thread同時執行,第一筆開始和
最後一筆結束的時間

(1) 1秒
(2) >50秒
(3) <50秒
(4) ~=50秒

我個人認為是要(4)~=50秒
不知到各位大大的意思?


就像前面版大的回文..multi thread..或許效率會好一點...並非你同事說的好n倍.
不過後來關於multi thread這個議題..若用在網路這種環境的話..還是比單一thread來的好..
因為可以避免掉一各時間只能servervice for one client的問題


reply to postreply to post
作者 Re:Thread 的最主要功用??? [Re:honeyaaa]
honeyaaa





發文: 159
積分: 0
於 2008-05-09 16:27 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
寫了很簡單的Code來驗證自己的想法,
雖然我只用了很簡單的寫法,請各位
大哥不要見笑。

我用本機,單核心電腦測試了一下,會快一點點
但是並不是有快到N倍那樣誇張。

代碼寫的很差,要指點小弟的在看一下吧。

SokcetDemo.rar (314.3k)


honeyaaa edited on 2008-05-09 22:08
reply to postreply to post
努力,是成功唯一的途徑。
» JWorld@TW »  Java SE 討論區

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8