进程: 进程是CPU分配资源的基本单位
线程: 线程是CPU调度的基本单位
资源分配给进程,所有线程共享该进程的资源
当线程数大于CPU的数量,会出现时间片的轮询。
CPU时间片是直接分配给线程的,线程拿到CPU时间片就能执行了
CPU时间片不是先分给进程然后再由进程分给进程下的线程的。
所有的进程并行,线程并行都是看起来是并行,其实都是CPU片轮换使用。
线程分到了CPU时间片,就可以认为这个线程所属的进程在运行,这样就看起来是进程并行。
并发和并行的区别
并发:当有多个线程在操作时,如果系统只有一个CPU,把CPU运行时间划分成若干个时间片,分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状态。这种方式我们称之为并发(Concurrent)。并发=间隔发生
并行:当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。 并行=同时进行
区别:并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。
并行是同时做多件事情。
并发表示同时发生了多件事情,通过时间片切换,哪怕只有单一的核心,也可以实现“同时做多件事情”这个效果。
也就是说,并发可以是虚拟的同时执行,也可以是真的同时执行。而并行的意思是真的同时执行。
结论:并行是我们物理时空观下的同时执行,而并发则是操作系统用线程这个模型抽象之后站在线程的视角上看到的“同时”执行。
操作系统的设计,可以归纳为3点。
- 以多进程形式,允许多个任务同时运行。
- 以多线程形式,允许一个任务拆分成多个线程运行。
- CPU提供协调机制,允许线程之间共享资源,防止线程之间产生冲突。
多线程,实际上是计算机多种资源的并行运用,跟CPU有几个核心没什么关系。
参考文章:
https://blog.csdn.net/qq_42636010/article/details/100980056
https://www.cnblogs.com/amunamuna/p/10072036.html
https://www.cnblogs.com/fubaizhaizhuren/p/7501403.html