[問題] 關於pthread和select的小問題

看板C_and_CPP作者 (2orx)時間15年前 (2010/05/27 22:24), 編輯推噓1(1018)
留言19則, 4人參與, 最新討論串1/1
有幾個問題一直困擾小弟很久, 想請教各位先進 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

05/27 22:32, , 1F
1. 當然不會,thread1會睡滿五秒
05/27 22:32, 1F

05/27 22:32, , 2F
2. 即使沒有sleep,每個 thread 能使用的 CPU 時間有限
05/27 22:32, 2F

05/27 22:32, , 3F
時間到了就一定會強制換人做
05/27 22:32, 3F

05/27 22:33, , 4F
3. 是 sleep 的時間才對,blocking 並不會佔用 CPU
05/27 22:33, 4F

05/27 22:34, , 5F
除非你用的OS是non-preemptionXD
05/27 22:34, 5F

05/27 22:51, , 6F
謝謝回覆, 那請問當thread2也睡下去時
05/27 22:51, 6F

05/27 22:52, , 7F
假如thread1的5秒還沒到, 那此時是沒有thread可以使用
05/27 22:52, 7F

05/27 22:52, , 8F
cpu嗎?
05/27 22:52, 8F

05/27 22:53, , 9F
另外, 關於問題2,其實我也知道time slice和round robin
05/27 22:53, 9F

05/27 22:54, , 10F
的概念, 但假如我在thread1中無限迴圈的列印字句,
05/27 22:54, 10F

05/27 22:55, , 11F
且沒有給他sleep(), 我發現他就一直印下去了....
05/27 22:55, 11F

05/27 22:55, , 12F
難道一個thread的time slice真的這麼長 @.@"
05/27 22:55, 12F

05/27 22:57, , 13F
你的電腦並不是只有兩個 thread 在執行啊...XDD
05/27 22:57, 13F

05/27 22:58, , 14F
至於問題二,你要印多一點才會比較明顯,記得刷緩衝區
05/27 22:58, 14F

05/27 22:58, , 15F
只是switch速度快到你反應不過來而已..不是一個slice很長
05/27 22:58, 15F

05/27 22:59, , 16F
老實說我是第一次聽說用了 pthread 還用 I/O multiplex,
05/27 22:59, 16F

05/27 22:59, , 17F
雖然沒人說不可以,但我也不確定這樣玩會發生什麼事。
05/27 22:59, 17F

05/27 22:59, , 18F
就算只有兩個thread 都沒在跑時通常也會跑OS的idle task
05/27 22:59, 18F

05/27 23:00, , 19F
其實我也試過 pthread + select, 因為需要極大量連線 XDD
05/27 23:00, 19F
文章代碼(AID): #1B_e2Czv (C_and_CPP)