冒号课堂§3.4:事件驱动 - 编程入门网
式啊[7]。此外,聊天时不等对方回答,就可与另一网友交谈,这就是会话切换带来的异步效果。不过同样是聊天,改用电话就稍有不同了。”
冒号扫了 众人一眼,果见有人皱起了眉头。 “当你正用座机通话时,手机响了。你会怎么做?”冒号提示。 逗号本能地回答:“要么挂掉电话再接手机,要么让打手机的人迟些打来。” 句号听出了门道:“这说明电话的通话过程是同步而非异步的,原因是打电话双方的交流是连贯的、非堵塞式的(non-blocking),与QQ聊天正好相反。” 冒号点头称许。 虽然早已过了下课时间,引号仍是好学不倦:“我觉得观察者模式与事件驱动式很像啊。” “你开始不是还举了订阅杂志和RSS的例子吗?出版/订阅(publish-subscribe)模式[8]正是观察者(observer)模式的别名,一方面可看作简化或退化的事件驱动式,另一方面可看作事件驱动式的核心思想。该模式省略了事件管理器部分,由事件源直接调用事件处理器的接口。这样更加简明易用,但威力有所削弱,缺少事件管理、事件连带等机制。著名的MVC(Model-View-Controller)模型正是它的一个应用。”冒号长舒了一口气,准备收工,“事件驱动式的应用极广,变化极多,还涉及到框架、设计模式、架构、以及其他的编程范式,本身也可作为一种架构模型。今天我们仅仅是蜻蜓点水,更深入更具体的内容只能留后探讨了。时候不早,你们也该饿了,赶快回家吧!范式可不能当饭吃哦。” 众人笑作鸟兽散。 冒号课堂§3.4:事件驱动(8)时间:2011-06-25 BlogJava xyz98,插语 [1] 许多基于事件驱动的系统都提供了createEvent之类的API,授权编程者自行产生事件。 [2] 更准确地说,Windows先把所有的硬件事件存入系统消息队列(system message queue),然后再放入应用程序消息队列(application message queue)。 [3] 比如可以这样从msg中得到窗口过程: (WNDPROC)GetWindowLong(msg.hwnd, GWL_WNDPROC)。 [4] 后面的论述同样适用于其他形式的软件分层结构。 [5] 指事件处理器在处理过程中又产生新的事件,从而再次触发事件处理器。 [6] 比如套接字(socket)中的accept函数。 [7] 真正的P2P网络是不需要中心服务器的,此处P2P指聊天双方是不分主客的对等关系。 [8] 有人将出版-订阅模式视为事件驱动设计的同义词,这是有道理的:在实际生活中,处于出版商与订阅者之间的邮局可作为事件管理器。 。总结 事件是程序中令人关注的信息状态上变化。在基于事件驱动的系统中,事件包括内建事件与用户自定义事件,其中内建事件又分为底层事件和语义事件。此外,事件还有自然事件与合成事件之分。 Callback指能作为参数传递的函数或代码,它允许底层模块调用高层模块,使调用者与被调者从代码上解耦。异步callback在传入后并不立即被调用,使调用者与被调者从时间上解耦。 控制反转一般通过callback来实现,其目的是降低模块之间的依赖性,从而降低模块的耦合度和复杂度。 在框架设计中,控制反转增强了软件的可重用性、柔韧性和可扩展性,减少了用户的负担,简化了用户的代码。 控制反转、依赖反转原则和依赖注射是近义词,它们的主题是控制与依赖,目的是解耦,方法是反转,而实现这一切的关键是抽象接口。 事件驱动式编程的三个步骤:实现事件处理器;注册事件处理器;实现事件循环。 异步过程在主程序中以非堵塞的机制运行,即主程序不必等待该过程的返回就能继续下一步。异步机制能减少随机因素造成的资源浪费,提高系统的性能和可伸缩性。 独立是异步的前提,耗时是异步的理由。 事件驱动式最重要的两个特征是被动性和异步性。被动性来自控制反转,异步性来自会话切换。 观察者模式又名出版/订阅 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |