单线程、多线程、基于事件驱动的单线程 理解

事件:事件是 人为的
消息:消息是系统给封装的。
即:系统会把事件封装成为一个消息

监听事件的发生,以及将事件封装成消息,都是由系统来做的。
将消息放到消息队列,人为的通过函数也可以。

MFC中事件驱动图解。

为什么基于事件驱动的单线程程序可以不堵塞 ?
   因为事件监听的部分由操作系统来完成了,当事件来的时候,操作系统会将其会放消息 队列,
然后程序再去循环检索后,会直接将任务执行完。


单线程、多线程、基于事件驱动的单线程比较

单线程:任务按照顺序执行。如果某个任务因为I/O而阻塞,其他所有的任务都必须等待,直到它完成之后它们才能依次执行。这种明确的执行顺序和串行化处理的行为是很容易推断得出的。如果任务之间并没有互相依赖的关系,但仍然需要互相等待的话这就使得程序不必要的降低了运行速度。
多线程:任务在独立的线程中执行,共同执行,但是在单个线程内部可能会发生堵塞。
基于事件驱动的单线程:当事件到来时将它们分配给等待处理事件的回调函数。多个任务的话会依次的进行执行,但每个任务内部不会发生堵塞。
注意:多线程属于抢占式执行,而基于事件驱动的单线程中的任务排队执行。

猜你喜欢

转载自blog.csdn.net/qq_29824717/article/details/81836301