藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 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:)



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com