课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,越来越多的人都开始学互联网软件编程开发的相关技术知识,而今天我们就一起来了解一下,GUI编程开发中的事件驱动编程的优势与劣势。
在GUI编程中,事件是非常常见的。比如,用户在界面点击了按钮,就会发送一个“点击”事件,而相应的会有一个处理“点击”事件的事件处理器会来处理该事件。
因此,所谓事件驱动,简单地说就是你点什么按钮(即产生什么事件),电脑执行什么操作(即调用什么函数)。当然事件也不仅限于用户的操作.事件驱动的核心自然是事件。从事件角度说,事件驱动程序的基本结构是由一个事件收集器、一个事件发送器和一个事件处理器组成。事件收集器专门负责收集所有事件,包括来自用户的(如鼠标、键盘事件等)、来自硬件的(如时钟事件等)和来自软件的(如操作系统、应用程序本身等)。事件发送器负责将收集器收集到的事件分发到目标对象中。事件处理器做具体的事件响应工作,它往往要到实现阶段才完全确定。对于框架的使用者来说,他们能够看到的是事件处理器。这也是他们所关心的内容。
事件驱动编程
事件驱动编程通常只是用一个执行过程,CPU之间不是并发的,在处理多任务的时候,事件驱动编程是使用协作式处理任务,而不是多线程的抢占式。事件驱动简洁易用,只需要注册感兴趣的事件,在回调中设计逻辑就可以了。在调用的过程中,事件循环器(EventLoop)在等待事件的发生,跟着调用处理器。事件处理器不是抢占式的,处理器一般只有很短的生命周期。
事件驱动编程的优势
在大部分的应用场景中,事件编程优与多线程编程。
相对与多线程编程来讲,事件驱动编程比较容易,复杂度低,是开发者乐于接受的。
大多数的GUI框架,都是使用事件驱动编程了架构的。每一个事件会绑定一个处理器,这些事件通常是点击按钮,选择菜单,等等。处理器r来实现具体的行为逻辑。
事件驱动经常使用在I/O框架中,可以很好的实现I/O复用。很多高性能的I/O框架都是使用事件驱动模型的,例如:Netty、Mina、Node.js。
易于调试。时间依赖只和事件有关系,而不是内部调度。问题容易暴露。
事件驱动编程的劣势
如果处理器占用时间较长,那会阻塞应用程序的响应。
无法通过时间来维护本地状态,因为处理器必须返回。
通常在单CPU环境下,比多线程编程要快,因为没有锁的因素,没有线程切换的损耗。CPU不是并发的,这样的话就不适合用在一些科学计算的应用中。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。