事件驱动模型
2017-03-08 16:50
197 查看
事件驱动
事件驱动初了解:
通常,我们写服务器处理模型的程序时,有以下几种模型:(1)每收到一个请求,创建一个新的进程,来处理该请求;
(2)每收到一个请求,创建一个新的线程,来处理该请求;
(3)每收到一个请求,放入一个事件列表,让主进程通过非阻塞I/O方式来处理请求
上面的几种方式,各有千秋,
第(1)中方法,由于创建新的进程的开销比较大,所以,会导致服务器性能比较差,但实现比较简单。
第(2)种方式,由于要涉及到线程的同步,有可能会面临死锁等问题。
第(3)种方式,在写应用程序代码时,逻辑比前面两种都复杂,而这种方式就是事件驱动方式
综合考虑各方面因素,一般普遍认为第(3)种方式是大多数网络服务器采用的方式
事件驱动模型是什么?
目前大部分的UI编程都是事件驱动模型,如很多UI平台都会提供onClick()事件,这个事件就代表鼠标按下事件。事件驱动模型大体思路如下:1. 有一个事件(消息)队列;
2. 鼠标按下时,往这个队列中增加一个点击事件(消息);
3. 有个循环,不断从队列取出事件,根据不同的事件,调用不同的函数,如onClick()、onKeyDown()等;
4. 事件(消息)一般都各自保存各自的处理函数指针,这样,每个消息都有独立的处理函数;
#!/usr/bin/env python # -*- coding:utf-8 -*- from twisted.internet import reactor, protocol from twisted.web.client import getPage from twisted.internet import reactor import time class Echo(protocol.Protocol): def dataReceived(self, data): deferred1 = getPage('http://cnblogs.com') deferred1.addCallback(self.printContents) deferred2 = getPage('http://baidu.com') deferred2.addCallback(self.printContents) for i in range(2): time.sleep(1) print 'execute ',i def execute(self,data): self.transport.write(data) def printContents(self,content): print len(content),content[0:100],time.time() def main(): factory = protocol.ServerFactory() factory.protocol = Echo reactor.listenTCP(8000,factory) reactor.run() if __name__ == '__main__': main()
异步IO操作
参考:http://www.cnblogs.com/alex3714/articles/5248247.html http://www.cnblogs.com/wupeiqi/articles/5040823.html
相关文章推荐
- java 事件驱动模型
- 事件驱动的工作流过程链模型EPC
- Netty框架之异步事件驱动模型
- Nodejs之事件驱动+非阻塞io模型
- 大白菜Yarn采用事件驱动的并发模型
- Java学习疑惑(8)----可视化编程, 对Java中事件驱动模型的理解
- 经典软件设计模型 - 事件驱动模型
- 实例:触摸屏驱动-2.用input子系统报告事件 分类: linux_内核_input模型 2013-07-10 09:39 327人阅读 评论(0) 收藏
- nodejs的事件驱动模型
- 关于XML文档模型的事件驱动
- future相比于其他并发设计模式的优势(“回调驱动(多线程环境下)”、“消息/事件驱动(Actor模型中))
- YARN中MRAppMaster的事件驱动模型与状态机处理消息过程的分析
- 如何设计一个网络事件驱动模型
- spring 事件驱动模型
- 网络编程五种IO模型之重叠IO模型-事件驱动
- SAX是一个用于处理XML事件驱动的“推”模型
- Python并发编程-事件驱动模型
- 基于管道化和事件驱动模型的Web请求处理(二)
- 基于事件驱动的领域模型实现框架 - 分析框架如何解决各种典型业务逻辑场景
- 事件驱动模型的角度来看看 JAVA NIO