并发与异步

并发:对多任务的并行执行的支持机制。

多任务的消费机制。

多任务的处理机制;

异步:一种通信机制;

分流与合并机制。

异步与同步是一对概念,在方法调用的时候,如果我们等待方法调用的返回则是同步,不等待而继续执行程序流则是异步。从处理器的角度来看,有些操作消耗的时间,远远高于其运行指令的时间,比如从网络获取数据,写入文件到磁盘等。如果采用同步方式,则大大的浪费了处理器的计算能力。在IO密集型的应用里,异步调用成为提高软件性能的关键方法。

异步调用的关键点在于分流和回调执行起点。分流就是在当前代码位置,将一部分代码加入到条件达成后未来的回调执行流中,而另一部分代码则在当前程序流继续执行。回调执行起点通常为一个条件达成后来自操作系统的通知或者程序内部的消息(事件)。该事件会出发一个回调执行起点方法,去逆向执行回调流中的各个方法。

目前异步调用的实现最为优雅的方式是async/await机制,它以习惯的同步的编码风格来实现异步调用。在使用await的语句上,当前程序流从函数返回,而该语句以后的代码作为回调流在未来执行。

在不支持async/await的平台里,为了规避回调函数深度嵌套带来的代码风格异常丑陋。有两种比较成熟的解决方案,一种是采用生成器(yield),另一种是Promise/A+规范。

生成器在程序执行到yield时返回一个生成器对象,yield以后的代码在执行该对象的next()方法后,继续执行。如果将该对象的next()方法注册为回调执行起点方法,则可实现异步回调机制。

Promise/A+规范则采用then,fail等方法,将需要回调执行的方法注册到回调执行序列里面,Promise对象创建后继续执行当前程序流。回调执行起点方法则为resolve或reject。同样需要注意的是,需要将执行起点方法或封装后的方法注册到消息系统中。

并发的的实现通常有进程并发,线程并发,协程并发(用户态非抢占式执行单元),在分布式系统中存在网络级并发。

并发带来的主要问题是对共享资源的读写和执行条件依赖。对共享资源的读写问题的解决方案,目前常见的有两种,一是锁,二是消息队列。执行条件依赖问题的解决方案主要也有两种,一是通过主动检查共享状态变量,并提取需要的数据,令一种是被动接收通知,等待数据注入或主动去提取数据。

https://zhuanlan.zhihu.com/p/31851833

原文地址:https://www.cnblogs.com/feng9exe/p/11552883.html