作者charleshu (Analog Engineer)
看板C_and_CPP
標題Re: [問題] 關於pthread進行執行緒切換的時間點問題
時間Thu Jul 29 11:52:48 2010
※ 引述《hn12303158 (2orx)》之銘言:
: 請問各位先進
: pthread的切換時間點究竟是什麼時候呢??
: 我原本期望pthread能像從前唸過的OS觀念一樣, 一個thread執行一段time slice
: 就換另一個thread執行, 而切換時機由OS schedualer決定. 但經過實驗後我發現
: 2個現象;
: 1. 一般而言, 在pthread中一旦某個thread開始執行無窮迴圈, 若沒呼叫sleep()
: 或pthread_yield()就永不切換到另個thread
: 2.若一個thread A負責接收socket封包(比如while迴圈中執行recvFrom()), 另一個
: thread B負責處理其他工作, 即使thread B執行中而未曾呼叫sleep, 一旦kernel
: 收到封包, 就會去叫醒thread A(也就是換掉B), 然後執行recvFrom事務
: 請問以上2點是正確的嗎, 謝謝各位先進指教
1. 你用的平台是什麼? Linux 嗎? pthread 呢 kernel thread 還是 userspace thread?
各個 thread 的 priority 為何? schedule 的 rule 是什麼? RR 嗎?
常見的可能原因有
A. priority 問題.
B. schedule rule問題.
C. 現在雖然很少見到, 但也許你的環境預設使用 userspace 的 thread.
2. 因為 IO Bound 的優先權高於 CPU Bound, 因此大部分情況下, Kernel 會做這個切換,
但不是絕對.
--
Do not depend on others without effort...
當我年輕時,請教別人問題時常聽到上面那句話. 當時心裏偶而會有些小小抱怨.
當時間過去,我偶而會想到上面那句話, 心中十分感謝當初告訴我那句話的人.
當發現問題時,最有價值的不是問題的答案,
而是找到解決的方向,並在努力的過程裡具備解決問題的能力.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 221.169.217.133
推 hn12303158:真是抱歉, 我後來發現我記錯了, time slice用完thread 07/29 21:23
→ hn12303158:是會進行切換的, 以前沒切換真的是因為thread做的工作 07/29 21:24
→ hn12303158:不夠久, 另外我用的是ubuntu 9.04 07/29 21:25