进程和线程的区别和联系
一,进程(Process\Task)
1.定义:进程简单来说就是程序执行一次的过程,进程是操作系统分配资源的基本单位。
1.2:PCB(进程控制块)Process Control Block
进程控制块用来记录进程相关信息,如进程标识,关联进程信息等。用C语言来说就是一个庞大的结构体。pcb中有pid,文件描述符表,内存指针等。
那么计算机中是如何执行进程的呢?
1.3进程执行原理:
最初的计算机只能执行一个进程任务,效率低下,所以后来多任务操作系统登场了,采用分时复用的方式来使仅仅几个CPU就可以执行多个任务,并且
在同一个CPU中,同时执行多个任务,就叫做“并发执行”。
在同多个CPU中,同时执行多个任务,就叫做“并行执行”。
对应的,进程就有两个状态:就绪状态和阻塞状态;
进程优先级:有些进程本身需要消耗 cpu 资源更多(如游戏和浏览器对比,游戏需要消耗 cpu 资源比浏览器更多),则该进程的优先级较高。
进程的上下文:保存进程执行的中间状态,确保并发执行时 cpu 能够沿着某个进程上次的执行状态继续执行。
进程的记账信息:统计每一个进程在 cpu 上运行了多久。
二,线程(Thread)
2.1定义:线程是一个进程的一部分,在并发执行的过程,CPU频繁的创建,销毁对资源的消耗
比较大,所以线程就出现了,进而可以理解以为线程是一种轻量化的进程。
2.2
1)进程包含一个或多个线程,线程是CPU分配资源的基本单位,线程会共享进程中的资源。
2)线程只会在进程创立之初消耗资源,相应的线程只会伴随着进程的销毁而结束,才会释放资源。
3)对于线程与线程之间,因为资源相互独立,各自的线程是不会互相影响的,但是在同一个进程中,进程是会相互影响的,往往伴随着一个线程的崩溃就会引出一系列问题,这就是所谓的"线程安全问题".
cpu 执行线程的过程,与 进程调度 是一样的,但是我们称为线程调度。每一个线程都有对应的线程调度信息(状态、优先级、上下文和记账信息),但是一个进程中的所有线程都共享同一份文件描述符表和内存指针。
2.3进程状态:
2.3.1)NEW:线程创建之初,还未经start()方法调用;
2.3.2)runnable:可执行或执行中的状态
2.3.3)terminated:线程终止
2.3.4)time_waiting\waiting:等待其他线程
2.3.5)blocked:因为锁而导致阻塞状态。
三进程和线程的区别和联系
1.进程包含一个或多个线程,称为主线程。
2.线程与线程之间资源独立,各自互不打扰,而线程与线程之间往往伴随着一个线程的崩溃就会引出一系列问题,相互影响。
3.对进程来说,每创建一个进程,就会申请资源,而对于线程来说,伴随着进程的生命周期,在进程还未结束的时候,销毁一个线程时,不会影响资源.
4.进程是操作系统资源分配的基本单位,线程是操作系统调度执行的基本单位。
