|
藍森林 http://www.lslnet.com 2006年6月6日 10:18
如何優化程序,降低CPU佔用率??
最近寫一個linux服務器程序,需要同時執行3個功能,一個是監聽客戶端連接,另一個是定時地檢查消息發送隊列,最後一個是定時地向總服務器發送自己的當前狀況,我的實現方法是使用多線程,將他們三個分為三個線程執行,由於在線程裡面不知道怎麼實現定時器,我用for和getitimer循環來實現定時,不過發現這樣CPU的佔用率到了100%,不知道各位高手有沒有什麼好的程序實現方法來解決CPU佔用問題,謝謝!!! |
如何優化程序,降低CPU佔用率??
循環是最佔用CPU的,最簡單的方法是在你的循環裡面加一個usleep(500),這樣CPU佔用率就會大大降低 |
如何優化程序,降低CPU佔用率??
可是usleep能用在線程裡面麼?這樣的話,會把整個進程阻塞的。 |
如何優化程序,降低CPU佔用率??
我找到辦法了,
用select來實現定時
select(0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &timeout)
就可以了,解決了困擾我很久的問題,哈哈,爽,謝謝你的提醒. |
如何優化程序,降低CPU佔用率??
我再vxworks用的是taskDelay(1);
你的用法是典型的不正規。你利用其中的timeout阻塞來進行
本來應該用sleep()做的工作。 |
如何優化程序,降低CPU佔用率??
你說的方法在線程裡面可以實現麼?sleep只能使用在進程,在線程裡面使用的話,會把整個進程阻塞的,usleep和nanosleep都一樣,只能適用於進程,要是可以用在線程的話,這個問題也不會困擾我很久了。 |
如何優化程序,降低CPU佔用率??
順便問一下,vxworks是什麼東東:) |
如何優化程序,降低CPU佔用率??
我收回我的觀點。
在linux下用select()算是正規的用法。
sleep()用於以秒為單位的線程休眠。
usleep(), nansleep()用於小於1秒的休眠
select(), poll(),也能做小於1秒的休眠。
同sleep()比在處理上下文時有些差別。
但是按照道理來說sleep()不因該引出線程的阻塞。
請描述下你的程序。讓我見識見識。
vxWorks是一種嵌入式操作系統。 |
如何優化程序,降低CPU佔用率??
Thanx for your comments and maybe i say sth wrong, i don't mean blocking of process, i just want to say using sleep will stop whole process instead of one single thread:) |
| |