【操作系统】进程与线程

本文详细探讨了进程与线程的概念、联系和区别,包括进程的五种基本状态,线程的组成,以及进程和线程在资源分配、执行效率和通信方式上的差异。此外,还阐述了进程间通信的各种机制,如管道、信号量、线程锁等,并解释了为何需要线程以及多线程和多进程在不同场景下的应用选择。最后,讨论了如何避免僵尸进程以及单线程处理高并发的策略。
摘要由CSDN通过智能技术生成

进程与线程的概念

进程是程序的一次执行过程,是动态概念,是操作系统进行资源调度和分配的基本单位,实现了操作系统的并发;每一个进程都有一个自己的地址空间,至少有 5 种基本状态,它们是:初始态,执行态,等待状态,就绪状态,终止状态。

进程不仅包括代码,还包括堆栈段、数据段、文本段、堆。

线程是进程的子任务,是CPU调度和分派的基本单位,保证了程序的实时性,实现进程内部的并发;

线程是操作系统最小的执行和调度单位。

每个线程有自己的虚拟处理器,自己的寄存器组,指令计数器和处理器状态。

每个线程完成不同的任务,它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

线程由线程ID、程序计数器、寄存器集合和栈组成。

 

进程和线程的联系

线程是进程的一部分,一个线程只能属于一个进程,一个进程可以包括至少一个线程。线程依赖进程生存。

进程和线程的区别https://www.cnblogs.com/jobbible/p/9766649.html

1 根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位

2 在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。

3 所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)

4 内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。

5 包含关系:没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。

或:

1 一个线程只能属于一个进程,一个进程可以包括至少一个线程。线程依赖进程生存。

2.进程在执行过程中拥有独立的内存单元,而多个线程共享进程的内存。(资源分配给进程,同一进程的所有线程共享该进程的所有资源。同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。)

3.进程是资源分配的最小单位,线程是CPU调度的最小单位;

4.系统开销: 由于在创建或撤消进程时,系统都要为之分配或回收资源,如内存空间、I/o设备等。因此,操作系统所付出的开销将显著地大于在创建或撤消线程时的开销。类似地,在进行进程切换时,涉及到整个当前进程CPU环境的保存以及新被调度运行的进程的CPU环境的设置。而线程切换只须保存和设置少量寄存器的内容,并不涉及存储器管理方面的操作。可见,进程切换的开销也远大于线程切换的开销。

5.通信:由于同一进程中的多个线程具有相同的地址空间,致使它们之间的同步和通信的实现,也变得比较容易。进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。在有的系统中,线程的切换、同步和通信都无须操作系统内核的干预

6.进程编程调试简单可靠性高,但是创建销毁开销大;线程正相反,开销小,切换速度快,但是编程调试相对复杂。

7.进程间不会相互影响 ;线程一个线程挂掉将导致整个进程挂掉

8.进程适应于多核、多机分布;线程适用于多核

 

进程间通信的方式:https://www.cnblogs.com/zgq0/p/8780893.html

https://www.nowcoder.com/ta/review-c/review?tpId=22&tqId=31379&query=%E8%BF%9B%E7%A8%8B&asc=true&order=&page=1

主要包括管道、系统IPC(包括消息队列、信号量、信号、共享内存等)、以及套接字socket。

 1.管道:速度慢,容量有限,只有父子进程能通讯    

2.FIFO:任何进程间都能通讯,但速度慢    

3.消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题    

4.信号量:不能传递复杂消息,只能用来同步    

5.共享内存区:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存

6.套接字SOCKET:socket也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同主机之间的进程通信。

进程间通信有两种基本模式:1 共享内存,2 消息传递

1 共享内存,建立起一块供协作进程共享的内存区域,进程通过向共享区域读写数据来交换信息。允许以最快的速度进行方便的通信,可以达到内存的速度。

2 消息传递:通过在协作进程间交换信息来实现通信。对于交换较少数量的数据很有用,更易于实现。通常用系统调用来实现,因此需要更多的内核介入的时间消

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值