拿网上老张喝茶为例子:
同步阻塞:
老张把水壶放到火上,立等水开
同步非阻塞:
老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有
异步阻塞:
老张买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。老张把响水壶放到火上,立等水开
异步非阻塞:
老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶
总结:
异步同步反映的是执行者执行方式,同步表示执行者主动查询,异步表示自己不主动查询而是等待消息等机制通知。
阻塞非阻塞反映的是执行者执行状态,阻塞表示执行者等待,非阻塞表示执行者不等做其他事情。
由facebook开源的web框架tornado就是宣称依靠异步非阻塞解决C10K问题。其异步思想主要有:
1 回调callback
2 基于python yeild机制的异步,主要是在执行一段需要等待io结果的程序A时,利用yield挂起,让CPU去执行其他程序。当io返回完毕时触发send or next函数重回A,继续执行。