进程和线程
进程:资源分配的最小单位,进程可以看作是一个程序,同一时刻进行的进程数小于核心数。
但是!!单核CPU也是可以进行多进程的(amazing~)它的实现原理是这样的:
同一时刻只能有一个进程进行,但是它可以在多个线程之间快速的进行切换,当从一个线程切换到另一个线程时,需要保护现场(有点像断点)所以进程拥有自己的地址变量、全局变量等硬件资源,一边切换回去能继续工作。
线程:线程就理解为进程的单元,一个程序是不是由多个内部任务组成的呢?每个内部任务就是一个线程,因为它称为微进程,是程序的最小组成单位。
线程可以共享进程的大部分资源,参与进程的资源调度,它是在进程中来回切换的 举个栗子~
我们看视频时,输出的声音和呈现的画面可以看成是两个线程,当我们拖动进度条的时候,如果没有线程的参与,那么会出现声音和画面不同步的效果。
所以应该是多个线程参与,分别执行不同的任务,加快程序的处理~~~
区别:
1、进程是资源分配的最小单位,线程是独立运行和独立调度的基本单位(CPU 上真正运行的是线程)
2、进程拥有自己的资源空间,一个进程包含多个线程;线程与CPU资源分配无关,多个线程共享一个进程的资源
3、线程的切换和调度远大于进程的切换和调度
并发和并行
并发:
在操作系统中,某一时间段,几个程序在在同一个 CPU 上运行,但在任意一个时间点,只有一个程序在 CPU 上运行
如果多个线程,只有一个CPU时,不可能真正实现多个线程同时运行,CPU的运行时间就会被划分成多个时间段,这些时间段就会分配给各个线程,当一个线程运行,其他线程挂起时,这种情况就是并发;
并行:
当操作系统有多个 CPU 时,一个 CPU 处理 A 线程,另一个 CPU 处理 B 线程,两个线程互相不抢占 CPU 资源,这种方式成为并行
区别:
并发:宏观上感觉是在同时执行多个程序,微观上,每一时刻只有一个线程在运行,这些线程是分时交替运行的
并行:在多CPU系统中,每个CPU执行一个程序,是真正的多个程序同时运行
阻塞和非阻塞
阻塞:调用进程或线程时被操作系统挂起
非阻塞:指调用线程或者进程不会被操作系统挂起
同步和异步
-
同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,知道收到返回信息才继续执行下去
-
异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率