[問題] 關於pthread進行執行緒切換的時間點問題

看板C_and_CPP (C/C++)作者 (2orx)時間15年前 (2010/07/28 01:23), 編輯推噓1(1019)
留言20則, 4人參與, 最新討論串1/2 (看更多)
請問各位先進 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點是正確的嗎, 謝謝各位先進指教 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.61.242.17

07/28 01:28, , 1F
會實驗出 1. 的結果通常是程式壽命遠低於 time slice。
07/28 01:28, 1F

07/28 01:28, , 2F
因為實務上的 time slice 比想像中的大很多。
07/28 01:28, 2F

07/28 01:29, , 3F
2. 的話大概只能說對七成,剩下三成現階段不解釋也沒差。
07/28 01:29, 3F

07/28 01:30, , 4F
請問timer slice大概有多長呢? 會超過5分鐘之類的嗎XD
07/28 01:30, 4F

07/28 01:31, , 5F
請問tin大可以稍微點醒我第二點剩下的3成觀念為何嗎?
07/28 01:31, 5F

07/28 01:31, , 6F
我真的很想知道
07/28 01:31, 6F

07/28 01:39, , 7F
單位至少是 ms,通常會根據 process 的 nice 值變化。
07/28 01:39, 7F

07/28 01:40, , 8F
目前看過的 5 到 100ms 都有,但是很多人測試的程式根本
07/28 01:40, 8F

07/28 01:41, , 9F
幾十 us 就跑完了,根本等不到它切換。
07/28 01:41, 9F

07/28 01:42, , 10F
對現在的 CPU 來說,ms 其實是很大的一個時間單位。
07/28 01:42, 10F

07/28 01:43, , 11F
2. 的剩下三成主要是很多事情未必真的是 kernel 在處理。
07/28 01:43, 11F

07/28 01:44, , 12F
但是同樣都是在背後有東西在運作,對你程式撰寫上不影響。
07/28 01:44, 12F

07/28 01:44, , 13F
所以現在先忽略沒差,不然實在講不完。
07/28 01:44, 13F

07/28 01:44, , 14F
痾..但是我的程式其中2個thread都各自是個無窮迴圈
07/28 01:44, 14F

07/28 01:45, , 15F
一但其中一個進入迴圈, 我就從來沒看過另外一個迴圈
07/28 01:45, 15F

07/28 01:46, , 16F
印出的字樣了@@"
07/28 01:46, 16F

07/28 01:52, , 17F

07/28 01:53, , 18F
像我這樣的程式碼 確實可以看到 111111222222 交互印出
07/28 01:53, 18F

07/28 01:58, , 19F
100% 是程式寫錯,可以給大家看一下你怎麼測的。
07/28 01:58, 19F

07/28 15:02, , 20F
用印出東西來測,要注意IO buffer的問題
07/28 15:02, 20F
文章代碼(AID): #1CJnOUbd (C_and_CPP)
文章代碼(AID): #1CJnOUbd (C_and_CPP)