进程和线程的区别与联系

何为进程?

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

进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态,所谓的创建进程和撤销进程,都是指对 PCB 的操作。

进程是拥有一个执行流,或多个执行流的线程组。

进程是一个能独立运行的基本单位,同时也是系统分配资源基本单位。(独立性

进程是动态执行的程序。(动态性

任何进程都可以同其他进程一起并发执行。(并发性

进程间的相互制约,进程具有执行的间断性,进程按照各自独立不可预知的速度向前推进。(异步性

何为线程?

线程是独立调度的基本单位。

一个进程中可以有一个或多个线程,它们共享进程资源。

Linux下线程用进程PCB模拟描述,也叫轻量级进程。

线程是进程内部的一个执行流,也就是线程在进程的地址空间内运行。

线程是CPU调度的基本单位(CPU调度是按照PCB进行调度的)(程序执行的最小单位)

创建或销毁一个线程相较创建或销毁一个进程成本要低(创建进程要创建PCB、虚拟地址空间、创建页表、维护映射、把硬盘的代码数据加载到内存、文件描述符等等,而创建线程只需要一个PCB指向进程的虚拟地址空间即可,同样销毁一个线程只需要销毁PCB即可)

线程间的切换相比于进程间的切换容易的多(进程间的切换:PCB切换,页表切换等等,线程切换:PCB切换,页表不切换)


QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一个新链接从而发起 HTTP 请求时,浏览器还可以响应用户的其它事件。

共同点

功能上都是用于实现多任务并发程序设计的技术手段,线程的状态包括就绪、执行与阻塞,与进程类似。 
从系统实现的角度看,进程实体和线程实体在Linux内核中都是有task_struct实现的,两者的创建最终都是调用系统函数clone()。

进程和线程的区别

1 目的

进程是资源分配的基本单位,线程是系统调度的基本单位,进程维护资源,线程是真正的执行体。

2 定义 

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

线程是进程上的一个实体,是系统调度的基本单位。

3 所属关系 

线程只能属于一个进程,而进程可以创建多个线程,且最少创建一个主线程。

4 拥有资源

进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属进程的资源。

5 调度情况

线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程切换,从一个进程中的线程切换到另一个进程中的线程时,会引起进程切换。

6 系统开销

线程开销小于进程开销,切换效率高于进程

由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程 CPU 环境的保存及新调度进程 CPU 环境的设置。而线程切换时只需保存和设置少量寄存器内容,开销很小。

进程需要独立的数据段,代码段、扩展段等系统资源,创建时需要复制(写时复制)父进程的所有资源。而线程与其它线程共享进程的系统资源,每个线程只需要拥有自己的栈段和寄存器,用于存储局部变量和临时变量。但进程因为有独立的数据段、堆栈段,所以更加稳定、安全。

7 通信机制

线程间可以通过直接读写同一进程中的数据进行通信,但是进程通信需要借助 IPC。(Inter-Process Communication)

进程间相互独立,互不打扰。因此通信方式较为复杂,包括Pipe(管道),Signal(信号),Semaphore(信号量),Message(消息队列),SharedMemory(共享内存), Socket(套接字),文件。(PIC包括Semaphore,Message, SharedMemory)

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

8 控制权 

线程可以销毁,挂起、恢复其它线程,也可以通过销毁主线程来销毁进程,而进程没有权利控制其父(子)进程的状态。子线程终止不会引起其它线程或者进程的终止,但进程(主线程)的终止能够引起所有子线程的终止,同时任何一个子线程执行exit()会引起进程中的全部线程同时灭亡。

9 linux系统内核实现 

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

进程和程序的区别?

程序是指令的有序集合,而进程是动态执行的程序(把程序加载到内存中,用PCB描述,被调度,被执行,有生命周期)--程序静态的,进程动态的

程序可以作为一种软件资料长期保存,而进程是有生命周期的。--程序可以一直被保存,无生命周期,进程是有生命周期的

优点

线程

线程共享进程的地址空间,因此线程间通信比较容易(但是不安全要注意维护),而进程间通信就相比较困难了,因为两个进程看到同一块资源不容易 ------------节约资源,成本低,调度切换快

创建销毁成本低

线程间切换容易

等待慢速I/O的同时,可以干其他事情

进程

更强的容错性,安全,一个进程挂了,不影响其他.

多进程比多线程编写,调试容易。

线程应用场景

等待慢速I/O时,交给一个线程等待,接着做其他事情

通信,比较容易(注意加锁)

进程的应用场景

需要安全稳定时用进程,需要速度时用进程,既要速度又要安全。

有的书上说,能用多进程解决的尽量不要用多线程

参考文献

[1] 进程和线程的区别,以及应用场景

[2] 进程和线程的区别与联系

[3] CS-Notes: 进程与线程

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值