把多个程序同时装入一个计算机系统的主存储器并行执行,称为并发程序设计
1.并发:
在一段时间内,多个程序保持就绪态,随时可以被CUP运行。单核处理器就可以做到。
多道环境下的程序设计叫做并发程序设计
2.并行:在同一时刻多个任务同时执行,或者说是在同一时刻可以执行多条程序指令,多核处理器才可以做到。
3.多进程:每个进程都拥有自己独立的资源,多个进程可在单核处理器上并发执行,在多核处理器上并行执行。
4.多线程:一个进程中拥有多个线程就叫多线程,一个进程只拥有一个线程叫单线程。多个线程可在单核处理器上并发执行,在多核处理器并行执行。
操作系统的设计,因此可以归结为三点:
(1)以多进程形式,允许多个任务同时运行;
(2)以多线程形式,允许单个任务分成不同的部分运行;
(3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资
并发程序设计概念:
- 单道批处理系统:一次只能在主存中装入1个程序, 该程序独享所有资源(即使有些资源该程序不用),cpu处理完这个程序,下个程序才能进入内存。
多道批处理系统:一次能在主存中装入多个程序。 - 并发执行:(看多道程序执行示意图)
在一段时间内,有两个或两个以上的程序同时处于开始运行(已经在内存中了,就绪态)但尚未结束的状态。 - 我们把多道环境下的程序设计叫做并发程序设计。
例子:
人脑和计算机有好多相通之处,人脑一心二用和计算机的单核多线程几乎是同样的道理:通过快速切换时间片来模拟并行处理。
所以不要费劲心思想着突破人类的生理极限去做到“高并发”。
稍微有点经验的程序员都知道,通过简单的开进程、线程去实现高并发是非常愚蠢的行为,因为Context Switch的耗时在随着并发度的提高会占比越来越大,CPU会花费大量时间进行每个线程Context恢复&保存,高并发的不二法门一直是“异步非阻塞”。
同理,我们面对千头万绪的事情的时候需要做的是,记下需要做的事情,然后按照优先级,一件一件来做,如果遇到外部因素造成的“阻塞”,那就暂停任务,记录进度,切换到下一个任务上去。
但由于我们的生理限制,我们的“内存”小得可怜,“硬盘”读写速度奇慢无比,还容易丢数据。