Chinaunix首页 | 论坛 | 博客
  • 博客访问: 88869
  • 博文数量: 31
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 350
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-16 20:38
文章分类
文章存档

2009年(12)

2008年(19)

我的朋友

分类:

2008-09-03 18:43:13

Event-driven programming,顾名思意,就是根据当前发生的事件来决定下一步动作,其实,这和State-machine programming在本质上是一回事,因为State-machine是根据当前的状态来决定下一步动作。说到底,CPU的逻辑结构本身也是一种Event-driven或者说是State-machine,因为数字电路的设计方式的两种结构:组合逻辑和微程序控制,其实也是按照状态的装换来设计的。

Event-driven programming的用处很广,当然由于它与生俱来的特性,它特别适合做控制系统。什么是控制系统?不太容易定义。但是,平时我们经常接触这类东西,比如我们在写GUI程序的时候,我们通常为某类事件注册一个函数,每当这个事件发生的时候,系统就会调用我们的函数,这样的函数通常成为Callback。从上层来看,我们不需要用循环来等待某个事件的发生,但其实底层还是得等待这个事件的发生,当然底层也不会用循环去等待,因为这样做效率太差了。那怎么办呢?学过操作系统的话,应该记得什么是context-switch的,就是说当不得不等待某类事件时,在linux kernel中可以显示去调用schedule()来达到让出CPU的目的。当然,必须有些数据结构来保存本次任务的执行信息,因为本次任务只是等待,而不是永远退出,所以要保证下次还能获得机会执行,于是linux kernel又引入了wait queue来记录处于等待状态的那些任务。

以上涉及到Linux kernel的东西,只是我一相情愿的想法,至于Linux kernel team的人是否是这么想的,我就不知道了!
阅读(550) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~