关于reactor的内部机制(浅析) -- dreamingk [DateTime(2004-08-09T02:21:09Z)] TableOfContents 刚才向hd讨教了一些关于reactor的问题,受益非浅,这里把它写下来。

精髓描述

reactor内部有一个event loop, 根据事件的类型,

调用不同的事件响应函数,这些函数是事先注册的callback object.

详细

::

   1 register_event(event1, fun1)  #这里简化了,twisted是用继承类,重载类函数来完成的
   2 register_event(event2, fun2)
   3 
   4 #event_loop:
   5 while(True):
   6     event = get_event(); #从事件队列里面取事件
   7 switch(event):
   8     case event1:
   9             fun1()
  10     case event2:
  11             fun2()
  12 ....

事件就会阻塞在事件队列里面。

而实际项目中,fun1,fun2很难保证能马上返回,可能要查询数据库什么的,因此这里必须想办法,比如多线程什么的,而twisted提供了deffered对象来提供帮助。

后记体会

这里其实和UI框架中的主事件循环很象,只是各种框架的响应事件的机制不同,MFC是用映射表,Java的swing使用interface,跟twisted有些象,qt使用的是信号/信号槽机制,各有利弊吧。

这些道理其实很简单,俺只是以为twisted为每个连接开一线程呢,所以不知道为什么要用deffered。