[問題] 關於 multithread timer 多執行緒的計時器
第一次在板上詢問...小的是linux系統程式的生手
最近在寫proxy server碰到timer的問題:
我的需求是有一台proxy server (以下簡稱ps)
ps 會開 n 個 thread 去處理
"每個不同的client 對固定server 的連線(send跟recv)"
圖解:
client --> proxy --> server
<-- <--
每個thread的特性就是,需要計時器去計時
每個client透過ps連到server有一段時間限制
(並不是處理完就關閉)
我目前有找到一些方法:
1. 針對單一thread: time.h裡面有內建,使用的是定期傳送signal(alarm)看是否過期
2. 狂耗CPU資源的方法: 就是隨時都檢查有沒有過期
3. pthread_cond_init(): 這方法也是會面臨main thread很吃資源的問題
4. glib提供的g_timeout_source_new(): 支援multithread,但程式碼要砍掉重練
如果要盡量省CPU資源,多久檢查檢查的時間內都不會吃CPU
請問有更好的方法嗎? 不然應該只能採用glib了
先謝謝板友
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.2.247
※ 編輯: note35 來自: 140.115.2.247 (08/14 14:10)
推
08/14 22:01, , 1F
08/14 22:01, 1F
我原先是使用epoll下去實作,但發現一些問題才改變做法
後來另外一組人馬有用poll把他實做出來,我才發現原來poll有辦法做到
推
08/15 00:17, , 2F
08/15 00:17, 2F
這個我沒嘗試過@@,會再去搜尋看看
推
08/15 21:38, , 3F
08/15 21:38, 3F
推
08/16 20:34, , 4F
08/16 20:34, 4F
→
08/16 20:40, , 5F
08/16 20:40, 5F
我是打算讓non-blocking跟blocking的方式都能運作
3的部分,誠如你所說,會在main thread上吃到CPU 100%
後來我的解決方法是用「共用變數」的方式去解決的
我拿成品交出去的時候,被對方認為這是種很奇妙的思維...
poll已經足夠支援我的需求,這點也算長了一些知識
另外補充
libev其實就是涵蓋了epoll(for linux)跟BSD自己的另一套poll函式庫
使用libev也就能同時支援兩個系統。
※ 編輯: note35 來自: 140.115.2.247 (08/22 19:02)
推
08/30 21:27, , 6F
08/30 21:27, 6F
→
08/30 21:28, , 7F
08/30 21:28, 7F
→
08/30 21:29, , 8F
08/30 21:29, 8F
推
08/30 21:33, , 9F
08/30 21:33, 9F
→
08/30 21:34, , 10F
08/30 21:34, 10F
→
08/30 21:36, , 11F
08/30 21:36, 11F
→
08/30 21:37, , 12F
08/30 21:37, 12F
→
08/30 21:38, , 13F
08/30 21:38, 13F
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章