进程存在的意义,就是让操作系统可以同时执行多个任务,实现“并发编程”的效果,虽然多进程可以实现“并发编程”,但同时也存在一个重要的问题:如果频繁地创建/销毁进程,操作系统就需要频繁地分配资源/回收资源,这个操作就比较低效。
针对上述问题,聪明的程序猿就发明了“线程”。
线程被包含在进程之中,是进程中的实际运作单位。一个进程在至少有一个线程,每个线程都是一个“执行流”,可以单独地在CPU上进行调度。
同一个进程中的线程共用一份系统资源(内存资源+文件资源),因此线程也被称为“轻量级进程”:只有在创建第一个线程的时候,需要申请系统资源,后续的线程与第一个线程共用一份系统资源,因此节省了申请资源的时间消耗;销毁线程的时候,只有在销毁最后一个线程的时候,才会真正释放系统资源,在此之前销毁的线程,都不会真正释放系统资源。
在操作系统内核中,用一组PCB来描述一个进程,而每个PCB对应一个线程,这些PCB上的内存指针、文件操作符表是同一份,但进程状态、进程优先级、进程上下文、进程记账信息则是每个PCB(线程)各有一份独立的。因此可以说,进程是资源分配的基本单位,线程是系统调度的基本单位。
进程与线程的区别和联系:
(1)进程包含线程,一个进程中至少有一个线程。
(2)线程比进程更轻量,创建速度更快,销毁速度也更快。
(3)同一个进程中的多个线程共用一份系统资源;多个进程之间则是各自使用独立的系统资源。
(4)进程是资源分配的基本单位;线程是系统调度的基本单位。