※ 引述《in2 (聖誕玉兔 *^^*)》之銘言:
: 理論上尖鋒時段每秒可以少掉上萬個 system call ,
: 不過不知道有沒有幫助就是了 ;p
: 晚上看看 ;p
原本程式的作法是, 使用者每按一個鍵,
就會透過 time(3)去拿一次當前的時間,
而 time(3)的作法是 (from /usr/lib/lib/libc/gen/time.c in FreeBSD 5.0-release)
#include <sys/types.h>
#include <sys/time.h>
time_t
time(t)
time_t *t;
{
struct timeval tt;
if (gettimeofday(&tt, (struct timezone *)0) < 0)
return(-1);
if (t)
*t = tt.tv_sec;
return(tt.tv_sec);
}
其中使用了 gettimeofday(2)
目前的作法是, 在 pttbbs.conf 中定義 OUTTA_TIMER 的話,
會由一隻 daemon (目前暫時寫在 shmctl utmpsortd 內)
定期取得當前時間, 寫到 SHM->GV2.e.now 中,
而每個 mbbsd只去取 SHM->GV2.e.now , 不直接跑 time(0)
以上萬個人, 每個人一秒鐘按一個鍵的話 (而通常每個人一秒鐘不只按一個鍵)
如此的作法可以每秒省下數萬個 gettimeofday(2)
不過就目前看起來似乎對整個系統沒有太大的幫助 ;x
--
※ 發信站: 批踢踢實業坊(ptt.csie.ntu.edu.tw)
◆ From: 140.112.30.143