作者beagle (红茶犬)
看板PttCurrent
标题Re: [建议] 引进以前dial-up BBS的功能
时间Mon Jun 6 21:40:19 2005
※ 引述《[email protected] (闭关修法)》之铭言:
: ※ 引述《[email protected] (小光光)》之铭言:
: : single thread telnet bbs 要做动画, 大概只有靠 select() 或 alarm() 之类做
: : nonblocking i/o. 每隔一小段时间 input timeout 就再送出一些 output.
: : 以 ptt 这种规模的 bbs 不太可能这麽做 -- 那会带来大量的 context switch,
: : 徒然浪费 cpu 及频宽.
: 问一下, 现在 pmore 利用 select() 来等 timeout,
: 对系统负荷实际带来多少影响, 可否跟大家分享一下 ?
: (估计目前并未大幅度触发应用, 但若有一点儿比较或统计,
: 相信有助於 bbs 管理员衡量是否引入此功能. )
以下和 BBS 程式无关, 纯粹讲系统...
select() 来等 timeout 的好处是
1. 不需用到 SIGALARM 因此不会出现 race condition...
(sleep() 会用到 SIGALARM)
2. 计时精确度高
3. Kernel scheduler 支援这种 wake up 方法, 因此 performance 也相当好
这作法我记得是在 Richard Stevens 的 UNIX Network Programming 里面看到的,
书中有详细的 performance 比较... 因此我深信不疑...
目前我自己写的 code 全部是用 select() 来替代 sleep()
* * *
如果要应用到 BBS 动画上, 大量 context switch 是必定免不了的,
因此我同意 smartboy 的说法, 这样的大幅浪费资源, 没有必要...
因为频宽/网路不良问题造成的断线也更容易在看动画时出现...
但是以小站来说, 资源原本就过剩, 也许可以考虑。
真的要做, 後面大量给 terminal function 动手术改成 non-blocking I/O
的过程才真的让人受不了。
--
Don't get suckered in by the comments -- they can be terribly
misleading. Debug only code.
-- Dave Storer
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.254.153