进程与线程

本文详细介绍了进程和线程的概念,包括进程的描述、管理方式、核心信息以及内核态与用户态的区别。同时,阐述了线程与进程的主要区别,如资源分配和开销,并讨论了线程在并发编程中的优势,如创建销毁的效率和资源共享。然而,过多的线程也会带来调度开销,影响效率。最后,强调了引入线程以提高系统效率的目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.进程

1.进程是什么

进程就是一个正在运行的程序(任务) ——任务管理器里就能看到很多进程,对操作系统来说一个任务(为了完成某个目的所要所得一系列事情)就是一个进程。

2.操作系统如何管理进程

(1)描述:task struct(进程描述符 Linux内核的一种数据结构 )

(2)组织:用双向链表把很多task struct变量给串起来。(例如 ,看到任务管理器,就可以认为是操作系统内核遍历了这个双向链表,然后把每个节点的信息获取出来并展示。)

3.一个进程的task struct里大概有什么信息

(1)pid(进程ID)

(2)进程的内存指针:描述了进程持有的内存资源是哪些范围(进程依赖的代码,数据都在哪里)

(3)进程的优先级

(4)进程的上下文(某个进程在cpu上执行了一段时间之后,就需要调度下去了,但可能还会再未来的某个时间段继续回到cpu上往下执行,这个进程就需要把上次执行的状态给记录下来,记录的内容是当时cpu的各个寄存器的值,记录在内存中,以便下次运行时可以恢复之前的现场,继续往下执行)

(5)进程的记账信息(就像是统计信息,记录每个进程在cpu上执行多久了,调度多少次了)

(6)进程的状态(创建,就绪,执行,阻塞,终止)

(3)-(5)提供的信息 都是为了辅助进程的调度(进程的调度是一个抢占式执行的过程,调度工作完全是由操作系统内核负责的,进程不知道自己接下来的命一切都听从于操作系统)

4.并行与并发:

(1)并行:多个进程在多个cpu下分别同时运行。

(2)并发:多个进程在一个cpu下你运行一会后换我运行,我运行一会后再换别的进程运行,让多个进程都得以推进。

现在表述的时候一般都用并发 又可以代指并行也可以指并发 看情况而定 但是都说成并发。

5.内核态与用户态

(1)内核态:操作系统内核来执行任务

(2)用户态:应用程序来执行任务

完整的操作系统=操作系统内核+配套的应用程序

6.为什么要引入进程

(1)让操作系统能够支持多“任务”

(2)更加充分的利用cpu资源

二.线程

1.进程和线程的区别:

(1)根本区别:进程是系统分配资源的最小单位,线程是系统调度的最小单位

(2)开销方面:进程都有自己的独立数据空间,创建和销毁的开销比较大:线程也有自己的运行栈和程序计数器,但创建和销毁的开销比较小。

(3)一个进程“挂了”并不会影响其他进程,但是一个线程出现异常,会影响到别的线程(因为它们共享一些内存资源)或者这个进程的。

(4)线程创建切换及终止的效率更高。

2.对比进程,线程的优点:

1. 创建一个新线程的代价要比创建一个新进程小得多
2. 与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多
3. 线程占用的资源要比进程少很多
4. 能充分利用多处理器的可并行数量
5. 在等待慢速I/O操作结束的同时,程序可执行其他的计算任务

3.进程是为了实现并发编程的效果,但是为了追求更高的效率就引入了线程,线程也被称之为“轻量级进程”,一个进程内的线程之间是可以共享资源的,每一个进程至少有一个线程存在,即主线程,每一个线程就对应到一个“独立的执行流”,在这个执行流里就可以完成一系列指令,多个线程就有多个“执行流”,就可以并发的完成多个系列的指令了,但是线程也不是越多越好,在线程数目达到一定的数量下,继续增加线程,这时候多个线程为了竞争cpu资源就会占用更多的开销(线程多了调度的开销也就多了),这时候不但不会提高效率,反而还会降低效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值