1. 若是作一件事情是有顺序的,先作完Task1,再作Task2,最后作Task3,这类事情也是咱们平常见的最多的一种状况,以下图所示: linux
2. 若是作一件事情并无顺序之分,能够同时进行,每一件事情也是相对独立的,其实这就是一种同步模型。固然,其实这也是一种理想状况,在大多数状况下,进程之间或线程之间每每要进行通讯,一个任务会等待另一个任务的返回结果,这就有些较为复杂了,以下图所示: 多线程
3. 在异步模型中,任务是交替运行的,但仍然在一个进程中,其中每一个任务的运行状态都是能够被咱们控制的,以下图所示: 异步
异步模型与同步模型有什么区别吗? 学习
a) 同步模型中的任务交替运行,是须要多个线程协同完成的,受到程序的控制,而在异步模型中则不须要。 操作系统
b) 多线程自己就受到操做系统的调度与管理,因此同步模型自己就受到操做系统控制的,而在异步模型中一个任务会一直运行下去,直到任务被运行完或者程序暂停这个任务而去执行令一个任务。 线程
异步模型有什么特色,为何要深刻了解并学习呢? 设计
异步模型比同步模型简单,由于异步模型只有一个进程并且任务的中止和运行状态是可控的。而在同步模型中,咱们须要把每个任务分红不少步骤,而后再有序的把他们组合起来。若是一个任务用到了令一个任务的结果,这个任务须要接受另外一个任务的输出作为他本身的输入,并且这种接收的数据常常是一段一段的而不是一个总体。 进程
异步模型与同步模型都是一个线程的话,他们执行相同的任务应该花费相同的时间,甚至比同步模型花费的时间更多,为何要才采用异步的模型呢? get
若是程序中会有阻塞、被强迫等待等状况,异步模型会比同步模型运行速度快,同步模型在有阻塞的时候的执行过程以下图所示: 同步
图中灰色的部分表明阻塞(等待),其中阻塞的缘由不少时候是因为I/O操做,这样的一个同步程序被称为“阻塞程序”。异步程序设计的原理就是当其中一个任务被阻塞的时候,能够先去执行一些其余能够执行的任务因此一个异步程序也会被叫作“无阻塞程序”。
那何时,咱们须要考虑使用异步模型呢?
a) 有不少任务,常常总有一个任务能够继续执行
b) 这些任务中要执行不少I/O操做
c) 这些任务大多都是独立的
这些优点,很是适合一个很是繁忙的Web Server,每个任务表明了一次接收请求和发送结果,而这些Client 请求大多都是独立的,因此一个Web Server的实现一个很好的异步模型的实现