事件:按下鼠标,按下键盘,按下游戏手柄,将U盘插入USB接口,都将产生事件。比如说按下鼠标左键,将产生鼠标左键被按下的事件。
消息:当鼠标被按下,产生了鼠标按下事件,windows侦测到这一事件的发生,随即发出鼠标被按下的消息到消息队列中,这消息附带了一系列相关的事件信息,比如鼠标哪个键被按了,在哪个窗口被按的,按下点的坐标是多少?如此等等。

1.要理解事件驱动和程序,就需要与非事件驱动的程序进行比较。实际上,现代的程序大多是事件驱动的,比如多线程的程序,肯定是事件驱动的。早期则存在许多非事件驱动的程序,这样的程序,在需要等待某个条件触发时,会不断地检查这个条件,直到条件满足,这是很浪费cpu时间的。而事件驱动的程序,则有机会释放cpu从而进入睡眠态(注意是有机会,当然程序也可自行决定不释放cpu),当事件触发时被操作系统唤醒,这样就能更加有效地使用cpu.

2.再说什么是事件驱动的程序。一个典型的事件驱动的程序,就是一个死循环,并以一个线程的形式存在,这个死循环包括两个部分,第一个部分是按照一定的条件接收并选择一个要处理的事件,第二个部分就是事件的处理过程。程序的执行过程就是选择事件和处理事件,而当没有任何事件触发时,程序会因查询事件队列失败而进入睡眠状态,从而释放cpu。

3.事件驱动的程序,必定会直接或者间接拥有一个事件队列,用于存储未能及时处理的事件。

4.事件驱动的程序的行为,完全受外部输入的事件控制,所以,事件驱动的系统中,存在大量这种程序,并以事件作为主要的通信方式。

5.事件驱动的程序,还有一个最大的好处,就是可以按照一定的顺序处理队列中的事件,而这个顺序则是由事件的触发顺序决定的,这一特性往往被用于保证某些过程的原子化。

6.目前windows,linux,nucleus,vxworks都是事件驱动的,只有一些单片机可能是非事件驱动的。

事件模式耦合高,同模块内好用;消息模式耦合低,跨模块好用。事件模式集成其它语言比较繁琐,消息模式集成其他语言比较轻松。事件是侵入式设计,霸占你的主循环;消息是非侵入式设计,将主循环该怎样设计的自由留给用户。如果你在设计一个东西举棋不定,那么你可以参考win32的GetMessage,本身就是一个藕合度极低的接口,又足够自由,接口任何语言都很方便,具体应用场景再在其基础上封装成事件并不是难事,接口耦合较低,即便哪天事件框架调整,修改外层即可,不会伤经动骨。而如果直接实现成事件,那就完全反过来了。

事件驱动VS消息驱动相关推荐

  1. 中断、轮询、事件驱动、消息驱动、数据流驱动(Flow-Driven)?

    轮询.事件驱动.消息驱动.流式驱动 ---数据流驱动 Unidirectional Architecture? 中断.事件.消息这样一种机制来实现更好的在多任务系统里运行... 阻塞,非阻塞 同步,异 ...

  2. 事件驱动和消息驱动的对比

    通常,我们写服务器处理模型的程序时,有以下几种模型: (1)每收到一个请求,创建一个新的进程,来处理该请求: (2)每收到一个请求,创建一个新的线程,来处理该请求: (3)每收到一个请求,放入一个事件 ...

  3. 嵌入式C开发中编程模型——重点事件驱动和表驱动

    嵌入式C开发中编程模型 事件驱动 消息驱动 事件驱动vs消息驱动 数据驱动 1. 表驱动法(Table-Driven) 用表驱动法来实现 Unix设计原则中的"分离原则"和&quo ...

  4. 事件驱动编程、消息驱动编程、数据驱动编程

    事件驱动 基本概念 窗口/组件 事件 消息(队列) 事件响应(服务处理程序) 调度算法 进程/线程 非阻塞I/O 程序的执行可以看成对CPU,内存,IO资源一次占用 现代操作系统支持多任务,可以分时复 ...

  5. Spring Cloud构建微服务架构:消息驱动的微服务(入门)【Dalston版】

    之前在写Spring Boot基础教程的时候写过一篇<Spring Boot中使用RabbitMQ>.在该文中,我们通过简单的配置和注解就能实现向RabbitMQ中生产和消费消息.实际上我 ...

  6. SpringCloud Stream消息驱动

    为啥有这个技术??? 1. 这个stream是操作消息队列的,简化,学习消息队列的成本降低. 2. 可操作rabbitMQ兔子message queue,kafaka,可理解为jdbc可操作oracl ...

  7. 【2016年第4期】大数据应用系统的消息驱动架构

    贵芳1,李廉1,杨静1,武永卫2 1.合肥工业大学计算机与信息学院,安徽 合肥 230009: 2.清华大学计算机科学与技术系,北京 100084 摘要:基于消息驱动框架的软件开发成为大数据应用系统的 ...

  8. java B2B2C Springboot多租户电子商城系统-Spring Cloud Stream(消息驱动)

    1.什么是Spring Cloud Stream 愿意了解源码的朋友直接企鹅求求:二一四七七七五六三三 Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力的框架.它可以基于 ...

  9. SpringCloud2020学习笔记13——SpringCloud Stream消息驱动

    目录 一.消息驱动概述 1.简介 2.官网 2.设计思想 ① 标准MQ ② 为什么用Cloud Stream ③ Stream中的消息通信方式遵循了发布-订阅模式 3.Spring Cloud Str ...

最新文章

  1. linux网卡绑定脚本
  2. Elasticsearch搜索引擎:ES的segment段合并原理
  3. 消除switch语句以获得更好的代码结构
  4. 谁才是世界上最好的 CI/CD 工具?
  5. VIm中Python自动补全插件Pydiction
  6. C/S和B/S和RIA
  7. 《暗时间》中提到的一些书籍整理
  8. 常用的参数检验和非参数检验方法对比
  9. 团队中各成员间相互协作办公用哪一个软件
  10. 移动应用的全新方式:超级app+轻应用
  11. 用telnet登录163服务器发邮件
  12. Android Studio使用技巧
  13. oracle之归档日志空间管理
  14. 手机工作室网络如何组建?
  15. github page建立动态网站
  16. CDA学习之Python - 面向对象编程
  17. grafanaprometheus 快速配置报警规则及报警接收
  18. Cannot create resource output directory
  19. 关于SQL语句的例子
  20. 机器学习之八大算法②and①——多变量线性回归(单变量线性回归)

热门文章

  1. 3D相机测距原理总结
  2. 【文献阅读笔记】BoT-SORT: Robust Associations Multi-Pedestrian Tracking
  3. Nginx SPDY patch实现
  4. linux unicode utf8.h,linux shell下16进制 “\uxxxx” unicode to UTF-8中文
  5. 【腾讯Bugly干货分享】Android进程保活招式大全
  6. SPSS考试操作题试卷
  7. 机器学习模型常用评估方法和指标
  8. 伪静态网站安全攻防如何理解
  9. uiautomator2 库中文手册
  10. 再谈解决“因为文件包含病毒或潜在的垃圾软件”系统找不到gpedit.msc