看板 C_and_CPP 關於我們 聯絡資訊
有幾個問題一直困擾小弟很久, 想請教各位先進 1. 我在一支程式裡創造2條pthread, 並且在pthread的callback function中都先睡5秒鐘, 當第一個thread開始睡5秒鐘(sleep(5)), 就把cpu控制權交出去, 第二個thread接到 cpu控制權後也立刻睡5秒鐘, 而把cpu控制權再交出去, 此時cpu控制權會交還到thread1 身上嗎, 如果會的話, thread1不是根本沒睡滿5秒就醒來了嗎? 2. 我在使用pthread撰寫multi-thread程式時, 如果某個thread的code裡沒有sleep(), 該thread是不是就不會把控制權交出去給別的thread使用呢? (至少我實驗結果看來如此@@) 3. 我使用socket的select技巧時, 會設定timeout來當作blocking時間, 有人告訴我 設定的那段blocking時間長度就是等於給該thread進行sleep()多久, 而我一直以為 設定的blocking時間長度是該thread"佔用"cpu控制權多久, 請問誰才是對的呢?? 煩請各位替小弟解惑了 p.s. 我的執行環境為linux 核心2.6, 使用gcc 4.3 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.96.101.68
james732:1. 當然不會,thread1會睡滿五秒 05/27 22:32
james732:2. 即使沒有sleep,每個 thread 能使用的 CPU 時間有限 05/27 22:32
james732: 時間到了就一定會強制換人做 05/27 22:32
james732:3. 是 sleep 的時間才對,blocking 並不會佔用 CPU 05/27 22:33
hilorrk:除非你用的OS是non-preemptionXD 05/27 22:34
hn12303158:謝謝回覆, 那請問當thread2也睡下去時 05/27 22:51
hn12303158:假如thread1的5秒還沒到, 那此時是沒有thread可以使用 05/27 22:52
hn12303158:cpu嗎? 05/27 22:52
hn12303158:另外, 關於問題2,其實我也知道time slice和round robin 05/27 22:53
hn12303158:的概念, 但假如我在thread1中無限迴圈的列印字句, 05/27 22:54
hn12303158:且沒有給他sleep(), 我發現他就一直印下去了.... 05/27 22:55
hn12303158:難道一個thread的time slice真的這麼長 @.@" 05/27 22:55
james732:你的電腦並不是只有兩個 thread 在執行啊...XDD 05/27 22:57
james732:至於問題二,你要印多一點才會比較明顯,記得刷緩衝區 05/27 22:58
hilorrk:只是switch速度快到你反應不過來而已..不是一個slice很長 05/27 22:58
tinlans:老實說我是第一次聽說用了 pthread 還用 I/O multiplex, 05/27 22:59
tinlans:雖然沒人說不可以,但我也不確定這樣玩會發生什麼事。 05/27 22:59
hilorrk:就算只有兩個thread 都沒在跑時通常也會跑OS的idle task 05/27 22:59
james732:其實我也試過 pthread + select, 因為需要極大量連線 XDD 05/27 23:00