Re: [問題] 關於pthread進行執行緒切換的時間點問題
看板C_and_CPP (C/C++)作者charleshu (Analog Engineer)時間15年前 (2010/07/29 11:52)推噓1(1推 0噓 2→)留言3則, 1人參與討論串2/2 (看更多)
※ 引述《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
推
07/29 21:23, , 1F
07/29 21:23, 1F
→
07/29 21:24, , 2F
07/29 21:24, 2F
→
07/29 21:25, , 3F
07/29 21:25, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章