并发编程,同步异步理论讲解

并发编程:

  并发呢指的是在操作系统中,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间

且这几个程序都是在同一个处理机上运行,但是任何一个时刻点上只有一个程序在处理机上运行。就是

并发看起来像在同一时间运行程序其实他们中间是有间隔的,只是这个间隔太短,我们感觉不到罢了,

所以看起来就像是在同时运行。

  1946年第一台计算机的诞生,那时候计算机工作还在采用手工操作方式,那时候还没有操作系统的

概念。手工操作方式的概念:用户独占全机。就是一个人使用的时候不会允许其他人进来使用,在旁边

观看都不行。这样呢就出现了资源利用率低,CPU呢需要等待手工操作,CPU利用的就不充分。这就是

单道执行它的工作原理就是输入→执行→输出。但是用到计算机工作的地方只有执行这样就大大的浪费

了资源浪费了CPU。

由此引申出了多道程序设计技术:

  所谓多道程序设计技术就是指允许多个程序同时进入内存并运行。即是把多个程序放入内存,并

允许他们交替在CPU中运行,第一个特点空间上的复用就是它们共享系统中各种硬件软件资源。当一

道程序因IO请求而暂停运行时,CPU便立即转去运行另一道程序。它的工作原理就是你在进行输入→

执行→输出的时候可以再进行一个输入→执行→输出操作,说的通俗一点就是你在使用洗衣机洗衣服

的时候用的时间应该会比较长,但是在洗衣机洗衣服的过程中我们肯定不会在洗衣机旁一直等着啥也

不做,可以在洗衣服的同时去厨房蒸米炒菜,甚至敲代码也是可以的。这个在你用洗衣机洗衣服的同

时呢又能去干其它的事情的状态这就是多道程序工作。

  第二个呢就是时间上的复用:切换+保存状态

    当一个程序遇到 IO 操作,操作系统会剥夺该程序的cpu执行权限,保存你现在的执行状态

并切换给另外的一个程序进行执行,等到另一个程序彻底执行完毕的时候才会回到刚才记录你状态的

时候继续执行。这样提高了cpu的利用率,并且也不影响程序的执行效率。

    当一个程序长时间占用cpu的时候,操作系统也会剥夺该程序的cpu执行权限,记录你当前

的执行状态并去执行其他程序,其他程序彻底执行完毕的时候才会回来继续执行你当前状态的这个程

序,这样做降低了程序的执行效率,使程序运行更加快捷。 

图片演示一下:

创建进程的两种方式:

程序的概念呢就是一坨代码

而进程的概念是正在运行的程序,也可以理解为正在运行的代码。

同步异步:表示的是任务的提交方式

阻塞非阻塞:表示的程序的运行状态

  同步就是我强依赖你(对方),我必须等到你的回复,才能做出下一步响应。即我的操作(行程)是

顺序执行的,中间少了哪一步都不可以,或者说中间哪一步出错都不可以,类似于编程中程序被解释

器顺序执行一样;同时如果我没有收到你的回复,我就一直处于等待、也就是阻塞的状态。 异步则

相反,我并不强依赖你,我对你响应的时间也不敏感,无论你返回还是不返回,我都能继续运行;你

响应并返回了,我就继续做之前的事情,你没有响应,我就做其他的事情。也就是说我不存在等待对

方的概念,我就是非阻塞的。

  从上面的例子来看:同步似乎等价于阻塞,异步则等价于非阻塞。其实有些狭义,但不可否认的

是,在一定情况下,确实可以这么认为;因为同步一定存在着阻塞状态,而异步一定不存在非阻塞的

状态。 但是不是就是说 同步调用 == 阻塞调用呢?然并不是;阻塞和非阻塞强调的是程序在等待调

用结果(消息,返回值)时的状态.  阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程

有在得到结果之后才会返回。非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

同步异步 阻塞非阻塞是两对概念 不能混为一谈

  

原文地址:https://www.cnblogs.com/sweet-i/p/11339888.html