【装】并行、并发、同步、互斥

并行

计算机操作系统中的并行,指的是同时存在于内存中的多道作业都处于运行状态。实际上都是宏观上并行微观上串行,因为这些作业都是开始各自的运行,但都没运行完毕,只是交替地使用cpu

    在操作系统中是指,一组程序按独立异步的速度执行,不等于时间上的重叠(同一个时刻发生)。要区别并发。并发是指:在同一个时间段内,两个或多个程序执行,有时间上的重叠(宏观上是同时,微观上仍是顺序执行)。并行也指8位数据同时通过并行线进行传送,这样数据传送速度大大提高,但并行传送的线路长度受到限制,因为长度增加,干扰就会增加,数据也就容易出错。

并发

操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行

并发是指两个或多个事物在同一时间间隔内发生。简单的理解就是在同一段时间内发生了多个事情。这里需要着重指出的是一个时间段,而不是一个时刻。比如一个处理器同一时刻只能做一件事情,但是电脑却可以同时做很多事情,比如一边放音乐,一边下电影等。整个电脑表现出来的就是并发性,很多事情同时在进行。但是我们只有一个处理器,它是通过把时间分片的机制来实现的。第一片时间来做A事情,第二片时间做B事情,第三片时间做C事情等,这样循环往复的执行,这样在一段时间内处理器同时做着多个事情,但在一个时间点上,处理器只做一件事情。从宏观上讲,多个事情在同时断断续续的进行着,对外表现就是放一会音乐,下一会电影,再放音乐,再下电影。但是我们并没有感觉出来它们之间的这种交替过程,我们感觉到的是它们在同时进行的,音乐一直在放着,电影一直在下着。并没有一会停顿,一会继续。那是因为处理器的频率非常高,所以单位时间非常小,我们人类根本分辨不出来。就像日常的白炽灯,它使用的是50赫兹的交流电,即每秒中电流的方向改变50次,每次改变电压都会从波峰经过0再到波谷,在电压为0的时候灯是不会发光的,电压在波峰或波谷处灯发的光是最亮的。它的理论表现就像汽车的转向灯一样,一闪一灭。但事实上我们感觉到的是一直在亮。因为他的闪灭周期只有0.02秒,再加上人的眼睛具有延时功能,所以正常情况感觉不到。

  在关系数据库中,允许多个用户同时访问和更改共享数据的进程。SQL Server 使用锁定以允许多个用户同时访问和更改共享数据而彼此之间不发生冲突。

  操作系统并发程序执行的特点:

  并发环境下,由于程序的封闭性被打破,出现了新的特点:

  ①程序与计算不再一一对应,一个程序副本可以有多个计算

  ②并发程序之间有相互制约关系,直接制约体现为一个程序需要另一个程序的计算结果,间接制约体现为多个程序竞争某一资源,如处理机、缓冲区等。

  ③并发程序在执行中是走走停停,断续推进的。

并发和并行的区别和联系

   “并行”是指无论从微观还是宏观,二者都是一起执行的,就好像两个人各拿一把铁锨在挖坑,一小时后,每人一个大坑。 而“并发”在微观上不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行,从宏观外来看,好像是这些进程都在执行,这就好像两个人用同一把铁锨,轮流挖坑,一小时后,两个人各挖一个小一点的坑,要想挖两个大一点得坑,一定会用两个小时。 从以上本质不难看出,“并发”执行,在多个进程存在资源冲突时,并没有从根本提高执行效率

    并发,是在同一个cpu上同时(不是真正的同时,而是看来是同时,因为cpu要在多个程序间切换)运行多个程序。并行,是每个cpu运行一个程序。打个比方,并发,就像一个人(cpu)喂2个孩子(程序),轮换着每人喂一口,表面上两个孩子都在吃饭。并行,就是2个人喂2个孩子,两个孩子也同时在吃饭。

 并发和并行是即相似又有区别的两个概念,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但在单处理机系统中,每一时刻却仅能有一道程序执行,故微观上这些程序只能是分时地交替执行。倘若在计算机系统中有多个处理机,则这些可以并发执行的程序便可被分配到多个处理机上,实现并行执行,即利用每个处理机来处理一个可并发执行的程序,这样,多个程序便可以同时执行

在同一时间间隔内有多个线程在同时执行,就是线程的并发。多个线程在逻辑上互有前因后果的关系,所以要对他们的执行顺序进行控制和协调,这就是线程同步。系统为了提高性能和吞吐量,采用了多线程并发来解决,但同时也引入了线程同步的问题。可以这样理解线程并发和同步的因果关系。

如果线程在时间上能够区分开来,比如线程A先执行,在指定时间后,能够执行完毕或产生我们想要的结果,这时线程B使用线程A的结果作为输入开始执行。像这样通过时间能够严格的加以区分的不是特别复杂的线程关系,可以让线程休眠指定的时间来进行同步。就是采用sleep方法实现同步。

如果线程在时间上不能区分开,但是在先后顺序上能够区分开,比如线程A先执行,我们不知道它什么时候能够执行完,但是我们知道它必须执行完后线程B才能开始执行。像这样在执行的先后顺序上能够严格的区分开的,而起前一个执行完,后一个才开始的,可以使用join方法来实现同步。

如果线程的执行比较复杂,交织在一起,那么只能通过等待和通知,即wait和notify方法来实现线程的同步,采用这种方式能够更加灵活的控制线程的步调,但是如果使用不慎的话会容易导致更大的问题。具体采用哪种同步方式要根据实际情况。如果你的同步过于发杂的话,最好还是重新进行算法和逻辑的设计,因为只有良好的设计,才可能会出现巧妙的实现,最终成就健康稳定的运行。


同步

         很多人认为同步指的就是同时,可能因为在宏观开了同步很多时候就表现就同时,就像并发在宏观下表现为并行。其实这样理解是不正确的。同步中的同,不是同时的意思,而是指的协同、协调。同步中的步,指的是步骤、步调。合起来就是协同或协调步骤或步调。就是多个事物的步调遵循一定的规范,而不是混乱不堪的。多个事物按照一定的规律进行着,可以是一个事物先进性一段时间,然后另一个事物再进行,也可以是一个事物进行完后,另一个事物再进行。总之要有一个规律把所有事物约束起来。

   同步就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。

  “同”字从字面上容易理解为一起动作。

  其实不是,“同”字应是指协同、协助、互相配合

  如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作

互斥

    两个或两个以上的进程,不能同时进入关于同一组共享变量的临界区域,否则可能发生与时间有关的错误,这种现象被称作进程互斥.

猜你喜欢

转载自blog.csdn.net/littesss/article/details/78408693
今日推荐