进程与线程

一、共同点

 功能上都是用于实现多任务并发程序设计的技术手段,线程的状态包括就绪、执行与阻塞,与进程类似

二、区别

1、定义

进程:进程是一个用户程序在同一数据集合上的一次执行过程,而在不同数据集合上或者同一数据集合的不同运行都是不同的进程。

     进程是资源分配的基本单位

          进程可以创建多个线程,且最少创建一个主线程

线程:线程是进程细化后的一个实体

           线程是系统调度的基本单位

           线程只能属于一个进程

2、系统开销

开销小于进程开销,切换效率高于进程(创建、销毁)

进程:需要独立的数据段,代码段、扩展段等系统资源,创建时需要复制(写时复制)父进程的所有资源。但是进程因为有独立的数据段、堆栈段,所以更加稳定、安全。

线程:与其它线程共享进程的系统资源,每个线程只需要拥有自己的栈段和寄存器,用于存储局部变量和临时变量。

3、资源分配

进程:所维护的是程序所包含的资源(静态资源),比如:虚拟地址空间(代码、数据、堆、共享库)、文件系统信息、文件描述符表和信号处理程序等。

线程:所维护的运行相关的资源(动态资源),比如:运行栈、调度相关的控制信息、待处理的信号集等。

4、通信机制

进程:相互独立,互不打扰,因此通信方式较为复杂。

线程:由于共享进程数据段,所以通过全局变量来实现通信,当然访问时需要加锁。

5、控制权

进程:进程没有权利控制其父(子)进程的状态

          进程(主线程)的终止能够引起所有子线程的终止

线程:可以销毁,挂起、恢复其它线程,也可以通过销毁主线程来销毁进程

           子线程终止不会引起其它线程或者进程的终止,任何一个子线程执行exit()会引起进程中的全部线程同时灭亡。

6、linux系统内核实现

无论进程创建使用的fork()函数,还是线程创建使用的pthread_create()函数最终都是调用系统函数clone(),,只是通过传入不同的flag来设置是否共享父进程的资源。

原文地址:https://www.cnblogs.com/lizijiangmm/p/9690536.html