python 多线程学习二(并行与并发)

0x00 操作系统的基本特性

谈到并发与并行,就不得不学习一下操作系统的基本特性,包括:并发、共享、虚拟与异步,其中,

并发特性为操作系统的最重要特性,其他三个特征都是以并发特征为前提的。

0x01 并发性

并发性concurrence并行性Parallel与是即相似又区别的两个概念。


并发 并行
同一时间段内,宏观上的同时运行 同一时刻,同时运行
互相抢占资源 互相不抢占资源

并发性concurrence:是指两个或多个事件在同一时间段内发生。在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。


并行性Parallel:是指两个或多个事件在同一时刻发生;当系统有一个以上CPU时,当一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。

注:决定并行的因素不是CPU的数量,而是CPU的内核数量,单个CPU多核也可以并行。


如下图所示,分别为并发和并行:

python 多线程学习二(并行与并发)
所以,并发是在一段时间段内宏观上多个程序同时运行,并行是在某一时刻,真正有多个程序在运行。并发,之所以可以视为同时运行,是由于计算机运算时间很快,让人感觉到程序运行是在同时的。

并行和并发的区别:

并发,指的是多个事情,在同一时间段内同时发生了。
并行,指的是多个事情,在同一时间点上同时发生了。

并发的多个任务之间是互相抢占资源的;
并行的多个任务之间是不互相抢占资源的;

只有在多CPU或者一个CPU多核的情况中,才会发生并行。否则,看似同时发生的事情,其实都是并发执行的。

0x02 共享性

在操作系统环境下,所谓共享(Sharing),是指系统中的资源可供内存中多个并发执行 的进程(线程)共同使用,相应地,把这种资源共同使用称为资源共享,或称为资源复用

共享方式:互斥共享方式同时访问方式

0x03 虚拟技术

操作系统中的所谓**“虚拟”(Virtual),是指通过某种技术把一个物理实体变为若干个逻辑上的对应物。物理实体(前者)是实的,即实际存在的,而后者是虚的,仅是用户感觉上 的东西。相应地,用于实现虚拟的技术称为虚拟技术**。在操作系统中利用了两种方式实现 虚拟技术,即时分复用技术空分复用技术

0x04 异步性

在多道程序环境下允许多个进程并发执行,但只有进程在获得所需的资源后方能执行。在单处理机环境下,由于系统中只有一台处理机,因而每次只允许一个进程执行,其余进程只能等待。当正在执行的进程提出某种资源要求时,如打印请求,而此时打印机正在为其它某进程打印,由于打印机属于临界资源,因此正在执行的进程必须等待,且放弃处理机,直到打印机空闲,并再次把处理机分配给该进程时,该进程方能继续执行。可见,由于资源等因素的限制,使进程的执行通常都不是“一气呵成”,而是以“停停走走”的方式运行。

内存中的每个进程在何时能获得处理机运行,何时又因提出某种资源请求而暂停,以及进程以怎样的速度向前推进,每道程序总共需多少时间才能完成,等等,这些都是不可预知的。由于各用户程序性能的不同,比如,有的侧重于计算而较少需要 I/O,而有的程序其计算少而 I/O 多,这样,很可能是先进入内存的作业后完成,而后进入内存的作业先完成。或者说,进程是以人们不可预知的速度向前推进,此即进程的异步性(Asynchronism)。尽管如此,但只要在操作系统中配置有完善的进程同步机制,且运行环境相同,作业经多次运行都会获得完全相同的结果。因此,异步运行方式是允许的,而且是操作系统的一个重要特征。

参考:https://www.cnblogs.com/xc-chejj/p/10813692.html
参考:计算机操作系统第三版(原版)+汤小丹