在比较线程和进程之间有什么区别前,我们先来一起回顾一下线程和进程的相关概念和特点。
概念
- 进程:一个在内存中运行的程序。每个进程都有自己独立的一块内存空间,进程是操作系统进行资源分配的基本单元。
- 线程:线程是进程中的一条执行流,是CPU调度的基本单元,在Linyx中这个线程的执行流通过pcb实现。
一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可以进行共享数据。
如果还是觉得难以理解,我们看看它的抽象类别:
进程:一个车间 = 一个进程(一个运行的程序);
多进程:一个工厂可以有多个车间进行工作;
线程:车间的一个工人 = 一个线程;
多线程:一个车间有很多个工人;
线程间的内存共享:一个车间的空间是工人们共享的,工人们可以随意进出(一个进程内存空间共享,每个线程都可以使用)
进程的优缺点
- 程序可以并发执行和资源共享。多道程序设计出现后,实现了程序的并发执行和资源共享,提高了系统的效率和系统的资源利用率;
- 顺序程序的特点:具有封闭性和可再性;
- 切换时消耗大一些
线程的优缺点
- 创建、销毁线程的代价小,切换、调度时的资源消耗小,占用的资源小;
- 线程间的通信更加的灵活;
- 在程序设计上容易出错;
区别
- 根本区别:进程是操作系统资源分配单位,而线程是CPU调度的基本单位;
- 资源开销:每个进程都有自己独立的代码和数据空间,程序之间进行切换时开销较大,线程可以看做是轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销很小;
- 包含关系:同一个进程有多个线程,所以执行过程不是一条,是多线程共同完成的,线程也被称为轻量级的进程;
- 内存分配:进程之间的地址空间和资源是相互独立的, 同一个进程的线程共享地址空间和资源,但是它们也有自己的一部分数据(线程ID、一组寄存器、栈、errno、信号屏蔽字、调度的优先级);
- 影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是如果一个线程崩溃时会直接导致进程都崩溃,所以进程要比多线程更加安全,更具有健壮性;
- 执行过程:每个进程都具有程序运行的入口,顺序执行序列和程序的出口,线程不可以独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,线程和进程都可以并发执行;
- 通信方式不同;
进程的通信方式
- 管道
- 共享内存
- 消息队列
- 信号量
- 网络
- unix套接字
线程的通信方式
包含进程间通信方式之外还可以:
- 通过全局数据
- 函数传参
怎样理解进程和线程的并发性
程序的并发执行是指一组程序的执行在时间上是重叠的,所谓时间重叠就是一个程序还没运行结束时另一个就可以开始执行了,多个程序处于已经开始执行但都还未执行完成;
进程可以并发执行,同一个进程间的多个进程也可以并发执行;
多进程并发执行较稳定(一个进程挂掉不会影响其他的),多线程服务器不稳定
什么时候会用到多线程
当系统中或者开发时,遇到高并发,并行的情况下为了解决负载平衡等问题就会用到线程,可以提高CPU的利用率。
648

被折叠的 条评论
为什么被折叠?



