进程与线程
Posted lizijiangmm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程与线程相关的知识,希望对你有一定的参考价值。
一、共同点
功能上都是用于实现多任务并发程序设计的技术手段,线程的状态包括就绪、执行与阻塞,与进程类似
二、区别
1、定义
进程:进程是一个用户程序在同一数据集合上的一次执行过程,而在不同数据集合上或者同一数据集合的不同运行都是不同的进程。
进程是资源分配的基本单位
进程可以创建多个线程,且最少创建一个主线程
线程:线程是进程细化后的一个实体
线程是系统调度的基本单位
线程只能属于一个进程
2、系统开销
开销小于进程开销,切换效率高于进程(创建、销毁)
进程:需要独立的数据段,代码段、扩展段等系统资源,创建时需要复制(写时复制)父进程的所有资源。但是进程因为有独立的数据段、堆栈段,所以更加稳定、安全。
线程:与其它线程共享进程的系统资源,每个线程只需要拥有自己的栈段和寄存器,用于存储局部变量和临时变量。
3、资源分配
进程:所维护的是程序所包含的资源(静态资源),比如:虚拟地址空间(代码、数据、堆、共享库)、文件系统信息、文件描述符表和信号处理程序等。
线程:所维护的运行相关的资源(动态资源),比如:运行栈、调度相关的控制信息、待处理的信号集等。
4、通信机制
进程:相互独立,互不打扰,因此通信方式较为复杂。
线程:由于共享进程数据段,所以通过全局变量来实现通信,当然访问时需要加锁。
5、控制权
进程:进程没有权利控制其父(子)进程的状态
进程(主线程)的终止能够引起所有子线程的终止
线程:可以销毁,挂起、恢复其它线程,也可以通过销毁主线程来销毁进程
子线程终止不会引起其它线程或者进程的终止,任何一个子线程执行exit()会引起进程中的全部线程同时灭亡。
6、linux系统内核实现
无论进程创建使用的fork()函数,还是线程创建使用的pthread_create()函数最终都是调用系统函数clone(),,只是通过传入不同的flag来设置是否共享父进程的资源。
以上是关于进程与线程的主要内容,如果未能解决你的问题,请参考以下文章