牵着老婆满街逛

严以律己,宽以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

边缘触发(Edge Trigger)和条件触发(Level Trigger)

       边缘触发是指每当状态变化时发生一个io事件,条件触发是只要满足条件就发 
生一个io事件。举个读socket的例子,假定经过长时间的沉默后,现在来了100个字 
节,这时无论边缘触发和条件触发都会产生一个read ready notification通知应用程 
序可读。应用程序读了50个字节,然后重新调用api等待io事件。这时条件触发的api会 
因为还有50个字节可读从而立即返回用户一个read ready notification。而边缘触发 
的api会因为可读这个状态没有发生变化而陷入长期等待。 

因此在使用边缘触发的api时,要注意每次都要读到socket返回EWOULDBLOCK为止,否则 
这个socket就算废了。而使用条件触发的api时,如果应用程序不需要写就不要关注 
socket可写的事件,否则就会无限次的立即返回一个write ready notification。大家 
常用的select就是属于条件触发这一类,以前本人就犯过长期关注socket写事件从而 
CPU 100%的毛病。


摘自某文档。


Level Trigger:
1) The input signal is sampled when the clock signal is either HIGH or LOW. 
2) It is sensitive to Glitches. 
Example: Latch. 

Edge Trigger:
1) The input signal is sampled at the RISING EDGE or FALLING EDGE of the clock signal. 
2) It is not-sensitive to Glitches. 
Example: Flipflop. 

posted on 2010-03-06 20:55 杨粼波 阅读(2550) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理