Python 事件驱动与异步IO
一、事件驱动编程是一种编程范式,这里程序的执行流由外部事件来决定。它的特点是包含一个事件循环,当外部事件发生时使用回调机制来出发相应的处理。另外两种常见的编程范式是(单线程)同步以及多线程编程。
1、让我们用例子来比较和对比一下单线程、多线程以及事件驱动编程模型。下图展示了随着时间的推移,这三种模式下的程序所做的工作。这个程序有3个任务需要完成,每个任务都在等待IO操作时阻塞自身,阻塞在IO操作上所花费的时间已经用灰色框标示出来了。
2、task1为单线程,task2为多线程(相当于用空间换时间),task3为协程(只能在单线程里实现多任务的异步)
3、当我们面对如下的环境时,事件驱动模型通常是一个好的选择:
a、程序中有许多任务
b、任务之间高度独立,因此他们不需要互相通信,或者等待彼此。
c、在等待事件到来时,某些任务会阻塞。
4、当应用程序需要在任务间共享可变的数据时,这也是一个不错的选择,因为这里不需要采用同步处理。
5、网络应用程序通常都有上述这些特点,这使得他们能够很好的契合事件驱动编程模型。