内容纲要
鲁迅说
有异步就有同步,有非阻塞就有阻塞
组合可得:同步阻塞、同步不阻塞、异步阻塞、异步不阻塞
一个来自逼乎上的 🌰 ↓
老张爱喝茶,废话不说,煮开水。
出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。
- 老张把水壶放到火上,立等水开。(同步阻塞)
老张觉得自己有点傻- 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)
老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。- 老张把响水壶放到火上,立等水开。(异步阻塞)
老张觉得这样傻等意义不大- 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)老张觉得自己聪明了。
所谓同步异步,只是对于水壶而言。普通水壶,同步;响水壶,异步。虽然都能干活,但响水壶可以在自己完工之后,提示老张水开了。这是普通水壶所不能及的。同步只能让调用者去轮询自己(情况 2 中),造成老张效率的低下。
所谓阻塞非阻塞,仅仅对于老张而言。立等的老张,阻塞;看电视的老张,非阻塞。情况 1 和情况 3 中老张就是阻塞的,媳妇喊他都不知道。虽然 3 中响水壶是异步的,可对于立等的老张没有太大的意义。所以一般异步是配合非阻塞使用的,这样才能发挥异步的效用。
什么是「事件驱动」?
传统编程大部分是线性模式的,控制流程由输入数据和编写的程序决定;在知道这个程序当前的运行状态(包括输入数据和程序本身)的前提下,你就知道接下来甚至一直到结束它的运行流程。
「事件驱动」是指在持续事务管理过程中,进行决策的一种策略,即跟随当前时间点上出现的事件,调动可用资源,执行相关任务,使不断出现的问题得以解决,防止事务堆积。事件驱动模式比较高冷,有个好莱坞原则:”不要打电话给我们,我们会打电话给你“。事件驱动程序在启动后会处于等待状态,会等待事件触发,然后执行响应函数。又被称为→ {% post_link 术语/IO多路复用 I/O多路复用 %} ←……