linux yield_带你通俗易懂的了解——Linux线程模型和线程切换

本文详细介绍了Linux中的进程与线程概念,包括进程作为资源分配单位、线程作为CPU调度单位,以及Linux线程模型的一对一、多对一、多对多。重点讨论了线程切换的直接和间接开销,如用户态与内核态切换、上下文切换、缓存缺失等,并提及了线程调度算法。

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

本文从linux中的进程、线程实现原理开始,扩展到linux线程模型,最后简单解释线程切换的成本。

linux中的进程与线程

首先明确进程与进程的基本概念:

  • 进程是资源分配的基本单位
  • 线程是CPU调度的基本单位
  • 一个进程下可能有多个线程
  • 线程共享进程的资源

基本原理

linux用户态的进程、线程基本满足上述概念,但内核态不区分进程和线程。可以认为,内核中统一执行的是进程,但有些是“普通进程”(对应进程process),有些是“轻量级进程”(对应线程pthread或npthread),都使用task_struct结构体保存保存。

使用fork创建进程,使用pthread_create创建线程。两个系统调用最终都都调用了do_dork,而do_dork完成了task_struct结构体的复制,并将新的进程加入内核调度。

进程是资源分配的基本单位、线程共享进程的资源

普通进程需要深拷贝虚拟内存、文件描述符、信号处理等;而轻量级进程之所以“轻量”,是因为其只需要浅拷贝虚拟内存等大部分信息,多个轻量级进程共享一个进程的资源。

线程是CPU调度的基本单位、一个进程下可能有多个线程

linux加入了线程组的概念,让原有“进程”对应线程,“线程组”对应进程,实现“一个进程下可能有多个线程”:

  • 操作系统中存在多个进程组
  • 一个进程组下有多个进程(1:n)
  • 一个进程对应一个线程组(1:1)
  • 一个线程组下有多个线程(1:n)
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值