【侵删】 参考:
面试必考的:并发和并行有什么区别? - 腾讯云开发者社区-腾讯云 (tencent.com)
CPU与GPU并行计算联系与区别_ljytower的博客-CSDN博客_gpu并行
多线程 ---并发与并行概念总结_黄复贵的博客-CSDN博客_多线程并发
https://blog.csdn.net/qq_36287702/article/details/105612182
一、进程和线程
进程(Process)和线程(Thread)都是操作系统中的基本概念,它们之间有一些优劣和差异一个
【进程】
是一个具有独立功能的程序关于某个数据集合的一次运行活动。多进程,就好比同时打开了Word,Excel和Visio,他们都是不同的程序运行活动,即多个进程同时启动而已。
【线程(执行路径)】
线程,是一个执行中的程序活动(即进程)的多个执行路径,执行调度的单位。线程依托于进程存在,在进程之下,可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间也叫做【线程栈】。
【多线程】
指在一个进程下有多个线程。各个线程执行自己的任务,这些线程可以“同时进行”。多线程强调”同时,一起进行“,而不是单一的顺序操作。
Thread类定义了多线程,通过多线程可以实现并发或并行。
多线程实现的是并发还是并行?上多线程可能被分配到一个CPU内核中执行,也可能被分配到不同CPU执行,分配过程是操作系统所为,不可人为控制。所有,多线程是并发还是并行的?都有可能。
一个线程只属于一个进程。进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。而且需要注意的是,线程不是一个可执行的实体。
多进程优点:
1、每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;
2、通过增加CPU,就可以容易扩充性能;
3、可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;
4、每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大。
二、并发和并行
并发和并行最开始都是操作系统中的概念,表示的是CPU执行多个任务的方式。
windows操作系统,是可以"同时"做很多件事儿的。比如我们可以一边看电影,一边聊QQ;一边听歌,一边打游戏。
但是,这所谓的"同时",在操作系统底层可能并不是真正的意义上的"同时"。
对于单CPU的计算机来说,在CPU中,同一时间是只能干一件事儿的。为了看起来像是“同时干多件事”,Windows这种操作系统是把CPU的时间划分成长短基本相同的时间区间,即”时间片”,通过操作系统的管理,把这些时间片依次轮流地分配给各个应用使用。
这样,给用户的感觉是他在同时的进行听歌和打游戏,实际上,在操作系统中,CPU是在游戏进程和音乐播放器进程之间来回切换执行的。
操作系统时间片的使用是有规则的:某个作业在时间片结束之前,整个任务还没有完成,那么该作业就被暂停下来,放弃CPU,等待下一轮循环再继续做。此时CPU又分配给另一个作业去使用。
由于计算机的处理速度很快,只要时间片的间隔取得适当,那么一个用户作业从用完分配给它的一个时间片到获得下一个CPU时间片,中间有所”停顿”,但用户察觉不出来。
并发(Concurrent),在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。
并行(Parallel),当系统有一个以上CPU时,当一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。【在有多个CPU的情况下,才会出现真正意义上的『同时进行』。】
并发是指在一段时间内宏观上多个程序同时运行。并行指的是同一个时刻,多个任务确实真的在同时运行。