进程调度有可抢占 哪种开销更大_什么时候用多线程什么时候用多进程

进程调度有可抢占 哪种开销更大_什么时候用多线程什么时候用多进程线程调度为什么比进程调度更少开销?在对比进程调度与线程调度的开销前,我们需要明白两点:进程与线程的差异任务调度的开销进程与线程的差异我们首先要明白,线程和进程有什么关系?从概念上来讲,线程是进程的一部分,只是任务调度相关的部分,所以我们才说,“线程是调度的最小单位”。进程拥有着资源,这些资源不属于某一个特定线程,因为所有线程共享进程拥有的资源,所以我们才说,“进程是资源分配的最小单位…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

线程调度为什么比进程调度更少开销?

在对比进程调度与线程调度的开销前,我们需要明白两点:

  • 进程与线程的差异
  • 任务调度的开销

进程与线程的差异

我们首先要明白,线程和进程有什么关系?从概念上来讲,线程是进程的一部分,只是任务调度相关的部分,所以我们才说,“线程是调度的最小单位”。进程拥有着资源,这些资源不属于某一个特定线程,因为所有线程共享进程拥有的资源,所以我们才说,“进程是资源分配的最小单位”。需要特别说明的是,Linux在线程与进程的实现上与概念上有少许差别,这个等下再讨论。

进程与线程关系

所以,我们fork一个新的进程时,实际上“伴生”了一个线程,而这个唯一的线程,实际上代表了这个进程参与到任务调度。在执行的过程中,进程通过pthread_create创建了更多的线程,例如上图中的线程2,线程n。此时,不管线程1,线程2,还是线程n,他们都代表了进程进行任务调度。

既然我们知道了进程与线程有什么关系,那么实际的linux内核是怎么实现进程与线程的呢?

在linux中,不管进程还是线程,都用struct task_struct描述。

struct task_struct {
	...
	struct mm_struct *mm; /*内存资源*/
	...
}

既然都是用struct task_struct描述,那么进程和线程的关系怎么体现?资源指针!例如上面代码块描述的结构成员struct mm_struct *mm,这是一个指针,指向实际的内存资源。同一个进程内的所有线程,他们都使用相同的资源,只需要把对应的资源指针指向相同的地址。

Linux内核就好像淡化了“线程”的概念,每一个线程描述都是struct task_struct,他们都是一个独立的“进程”,都有着自己的进程号,都参与任务调度,只不过指向相同的进程资源。

任务调度的开销

既然我们知道了进程和线程在linux实现上的关系,我们再来分析,为什么说线程调度比进程调度开销更小?

或许你有这样的疑问,既然在linux实现上,线程都是独立的struct task_struct,都参与任务调度,那这里说的线程调度和进程调度怎么区分?

我们不妨这样定义:

线程调度:使用相同资源的`struct task_struct`之间的调度
进程调度:使用不同资源的`struct task_struct`之间的调度

基于这样的定义,为了方便分析问题,我们回顾一下任务调度的开销主要有什么?

1. CPU执行任务调度的开销,主要是进程上下文切换的开销
2. 任务调度后,CPU Cache/TLB不命中,导致缺页中断的开销

对于第1点的开销,不管是进程调度还是线程调度都是必须的,所以,两者的差异体现在第2点。

再看回我们对“进程调度”和“线程调度”的定义,有没觉得灵光一闪?既然线程调度的struct task_struct都使用相同的资源,是不是就意味着,我即使切换到了其他的线程,CPU Cache/TLB命中的概率会高很多?相反,进程调度使用的是不同的资源,每次换了个进程,就意味着原有的Cache就不适用了,没命中,就触发更多的缺页中断,开销自然就更多。

所以,我们明白了,线程调度为什么比进程调度更少开销。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/194141.html原文链接:https://javaforall.net

(0)
上一篇 2025年11月11日 下午6:22
下一篇 2025年11月11日 下午7:01


相关推荐

  • 常用电容分类_电容电阻

    常用电容分类_电容电阻一、瓷介电容器(CC)1.结构用陶瓷材料作介质,在陶瓷表面涂覆一层金属(银)薄膜,再经高温烧结后作为电极而成。瓷介电容器又分1类电介质(NPO、CCG));2类电介质(X7R、2X1)和3类电介质(Y5V、2F4)瓷介电容器。2.特点1类瓷介电容器具有温度系数小、稳定性高、损耗低、耐压高等优点。最大容量不超过1000pF,常用的有CC1、…

    2022年8月22日
    14
  • 一元三次方程求根公式详细逐步推导

    一元三次方程求根公式详细逐步推导注 颜色为代数置换标记 推导后期需将前面的设定值回代 注 颜色为代数置换标记 推导后期需将前面的设定值回代 注 颜色为代数置换标记 推导后期需将前面的设定值回代已知 ax3 bx2 cx d 0a 0a b c d 已知 ax 3 bx 2 cx d 0 uada neq0 uada b c d in Re 已知 ax3 bx2 cx d 0a 0a b c d

    2026年3月19日
    1
  • javascript undefined_setvalidator

    javascript undefined_setvalidator解决DvaJS在models中的effects无法setInterval和setTimout的问题

    2026年4月15日
    5
  • c语言程序设计第4版pdf荣政_C语言程序设计 PDF 第4版

    c语言程序设计第4版pdf荣政_C语言程序设计 PDF 第4版给大家带来的一篇关于 C 语言相关的电子书资源 介绍了关于 C 语言 程序设计方面的内容 本书是由电子工业出版社出版 格式为 PDF 资源大小 81 9MB StephenG Kochan 史蒂芬编写 目前豆瓣 亚马逊 当当 京东等电子书综合评分为 9 4 内容介绍 C 语言程序设计 第 4 版 全面介绍了 C 语言的各种特性 包括 C11 中增加的内容 书中包含大量完整的示例及详细的讲解 无论是否拥有编程经验 你都可以

    2026年3月18日
    1
  • c语言编木马程序,肿么用C语言编写木马.病毒等程序

    c语言编木马程序,肿么用C语言编写木马.病毒等程序嘿嘿给你个类病毒C程序源码,看下方法吧#defineSVCHOST_NUM6#include#includechar*autorun={“[autorun]\nopen=SVCHOST.exe\n\nshell\\1=打开\nshell\\1\\Command=SVCHOST.exe\nshell\\2\\=Open\nshell\\2\\Command=SVCHOST.exe\nshel…

    2022年6月22日
    117
  • 模糊数学模型(一): 隶属函数、模糊集合的表示方法、模糊关系、模糊矩阵

    模糊数学模型(一): 隶属函数、模糊集合的表示方法、模糊关系、模糊矩阵模糊数学模型系列博文 1 基本概念 隶属函数 模糊集合的表示方法 模糊关系 模糊矩阵 2 模糊模式识别 海明贴近度 欧几里得贴近度 黎曼贴近度 格贴近度 最大隶属原则 择近原则 3 模糊聚类分析方法 模糊等价矩阵 模糊相似矩阵 传递闭包法 布尔矩阵法 4 模糊决策分析方法目录 1 1 模糊数学简介 1 2 1 模糊集和隶属函数 1 2 2 模糊集合的表示方法

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号