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

冷暖自知 提交于 2019-12-10 19:51:12

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

       边缘触发是指每当状态变化时发生一个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%的毛病。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!