看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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