|
发表于 2004-12-4 12:36:54
|
显示全部楼层
是在操作系统调度时,如果发现一个进程处于阻塞态,则不用调度该进程运行,这样节省了该进程本来要用的一定量的时间片,而用 while(1) 的话操作系统就不知道了,分配的时间片都用来做 while(1) 测试,这样就浪费了这些时间片。
而且 select 不会影响监听两路输入。如果你写过字符设备驱动的话,就知道 select 实现就是将该调用进程放入输入的等待队列中,即调用- [color=blue]sleep_on(...);[/color]
复制代码 进程状态变为TASK_INTERRUPTIBLE。任何一路上有输入时,系统首先调用的便是该驱动程序,驱动程序便将等待队列上的所有进程都唤醒,即调用- [color=blue]wake_up(...);[/color]
复制代码 进程状态变为 TASK_RUNNING。该进程被操作系统再一次调度到时,已处于就绪态,于是从 select 的下一句继续运行。
由此可见循环是仍然需要的。- [color=blue]
- while (1) {
- select(...);
- ... // process one input
- }[/color]
复制代码 似乎与信号机制关系不大。 |
|