老张爱喝茶,废话不说,煮开水。
出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。
1 老张把水壶放到火上,立等水开。(同步阻塞)
老张以为本身有点傻
2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)
老张仍是以为本身有点傻,因而变高端了,买了把会响笛的那种水壶。水开以后,能大声发出嘀~~~~的噪音。
3 老张把响水壶放到火上,立等水开。(异步阻塞)
老张以为这样傻等意义不大
4 老张把响水壶放到火上,去客厅看电视,水壶响以前再也不去看它了,响了再去拿壶。(异步非阻塞)
老张以为本身聪明了。
所谓同步异步,只是对于水壶而言。
普通水壶,同步;响水壶,异步。
虽然都能干活,但响水壶能够在本身完工以后,提示老张水开了。这是普通水壶所不能及的。
同步只能让调用者去轮询本身(状况2中),形成老张效率的低下。
所谓阻塞非阻塞,仅仅对于老张而言。
立等的老张,阻塞;看电视的老张,非阻塞。
状况1和状况3中老张就是阻塞的,媳妇喊他都不知道。虽然3中响水壶是异步的,可对于立等的老张没有太大的意义。因此通常异步是配合非阻塞使用的,这样才能发挥异步的效用。
程序员写程序,不少状况下,老张和水壶都要涉及,即调用者与被调用者。四种组合模式各有所长。
这个例子和银行排队有殊途同归之妙,但是我以为这个会比较容易理解一些。
老张一次比一次聪明,我认可跟老张很像。刚开始的状况逻辑比较简单,但效率低下。随着慢慢的提升,效率也提升了。因此我的认为,程序的效率和简单程度是成反比的。
但不是说异步非阻塞就必定是最好的,有的状况下更适合使用同步或者阻塞。程序员
并发(concurrency)和并行(parallellism)是:多线程
你吃饭吃到一半,电话来了,你一直到吃完了之后才去接,这就说明你不支持并发也不支持并行。
你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。
你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。并发
并发是两个队列交替使用一台咖啡机,并行是两个队列同时使用两台咖啡机异步
并发的关键是你有处理多个任务的能力,不必定要同时。
并行的关键是你有同时处理多个任务的能力。分布式
并发(Concurrency)是说进程B的开始时间是在进程A的开始时间与结束时间之间,咱们就说A和B是并发的。
并行(Parallel Execution)是并发的真子集,指同一时间两个进程运行在不一样的机器上或者同一个机器不一样的核心上。oop