原文地址:https://www.zhihu.com/question/64723752/answer/223613245

在Linux系统中,对于用户创建的进程(线程)来说,CPU分配时间片的单位是线程还是进程?

是线程。线程是实际工作的单元[1],进程只是一个容器,用来管理一个或多个线程。

1.这是不是就意味着尽量使用多线程并发,这样可以抢到更多的时间片。

理论上是的,多线程的一种用途就是能同时做好几件事情,以提高效率。但实际问题是,CPU的数量(核心数,下同)是有限的,而且并不多。如果你的CPU有8个CPU,并且整个系统中有8个线程的话,不考虑中断等因素,每个线程理论上能一直执行下去。然而多于8个线程以后,操作系统就必须进行调度,也就是分配时间片。具体的分配方案,或者说调度算法有很多种,详情参见Scheduling (computing)。如果一个进程创建了很多线程的话,最多也只有8个能够处于执行的状态[2],其余的线程必须等待调度。线程被调度的时候需要进行上下文切换,这个操作是一种额外的开销。线程数量过多的时候,上下文切换产生的额外开销会对系统的效率造成负面影响。

2.操作系统对于拥有多线程的进程,是否会减少其每个线程的时间片,或做其他处理来保证公平性?

这就是调度算法需要考虑和优化的问题。比如线程和进程有优先级,在抢占式的调度中,优先级高的线程可以从优先级低的线程那里抢占CPU。另外,在多CPU平台上,调度算法还要考虑缓存的关联性等。

在一个进程中的多个线程要注意在可能的情况下将本线程阻塞,将剩余的时间片让给兄弟线程。

在主流的操作系统实现里,一般进程是不能直接控制自己的线程的执行顺序的。也就是说,把一个线程挂起并不能保证另一个线程一定能够被执行。

注1:Linux内核其实不区分进程和线程,内核把执行单元叫做任务(task)。操作系统实际上调度的是进程,进程通过fork()来创建同样的另一个进程。每个进程有一个PID,同一组进程中最先启动的那个还有一个TGID。严格来说前者应该叫线程ID,后者应该叫进程ID。Linux里的线程实际上是共享一些资源的一系列进程而已。不过这里面要展开讲的话就又能写一篇回答了,就先讲这么多吧。

注2:这里说的是物理线程,有别于逻辑线程。

[转]关于Linux下时间片分配给进程还是线程的问题相关推荐

  1. Linux下C语言编程-进程的创建

    Linux下C语言编程-进程的创建 作者:hoyt 1.进程的概念 Linux操作系统是面向多用户的.在同一时间可以有许多用户向操作系统发出各种命令.那么操作系统是怎么实现多用户的环境呢?在现代的操作 ...

  2. Linux下查看某一进程占用的内存

    一. ps -ef|grep flink 和 top -p pid 组合 Linux下查看某一个进程所占用的内存,首先可以通过ps命令找到进程id,比如:ps -ef|grep flink,可以看到f ...

  3. Linux下内核进程、用户进程和轻量级进程(LWP)的理解

    区别和联系 我们经常提到线程.线程组.内核进程.用户进程.轻量级进程等词汇,那么他们之间有什么区别和联系呢? 首先,我们需要明确一点,Linux下并没有真正意义上的线程,甚至可以说没有进程这个概念,L ...

  4. Linux下查看某一进程所占用内存的方法 -- from cnblogser 小得盈满

    Linux下查看某一个进程所占用的内存,首先可以通过ps命令找到进程id,比如 ps -ef | grep kafka 可以看到kafka这个程序的进程id 可以看到是2913,现在可以使用如下命令查 ...

  5. 查看linux每个进程占用内存多少,Linux下如何查看哪个进程占用内存多?

    1.top top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器 可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者 ...

  6. Linux系统编程08---守护进程与线程

    目录 作者介绍 学习目标 1 守护进程(也称Daemon 精灵进程-->是后台服务进程) 1.1 守护进程的特点 1.2 进程组和会话 1.3 创建守护进程的模型 1.4 实例:创建守护进程模型 ...

  7. 【Linux系统编程】守护进程、线程

    ------------->[Linux系统编程/网络编程](学习目录汇总) <-------------- 目录 1.守护进程 1.1 进程组 1.2 会话 1.3 setsid()函数 ...

  8. Linux服务器查看带宽,进程和线程

    Linux服务器上监控网络带宽的常用命令 监控总体带宽使用 ――nload.bmon.slurm.bwm-ng.cbm.speedometer和netload 监控总体带宽使用(批量式输出)――vns ...

  9. linux下内存分配原因导致的Load过高

    这又是我学习的<linux内核实战>一篇笔记吧,做了些补充,为了便于自己的记忆,理解和整理下.一直对Linux的内存分配过程算是充满好奇,也看了些相关文章,不过有些和实际比较脱离,这两天学 ...

最新文章

  1. 互联网寒冬前端社招面试
  2. linux中文件的编辑 写入 读取 光标的位置 以及相应的补充
  3. 数数塔 NBUT - 1083
  4. 【Tensorflow】解决No module named ‘matplotlib‘/‘pandas‘
  5. 中秋祝福网页_中秋客户维系关怀,该送客户什么礼品?
  6. 贪心法——最优装载问题
  7. java中dao和实体类的关系_【JAVA基础】 PO、VO、BO、DTO、POJO、DAO之间的关系详解...
  8. 数据-第14课-栈的定义及实现
  9. C语言实现顺序表的插入删除(完整代码)
  10. Pandas sample随机抽样
  11. Matlab对语音信号做fft及对语音信号进行分帧加窗
  12. Windows10 文件夹按分组排序
  13. 2010计算机录制宏步骤,在word2010录制宏的操作
  14. 用命令行登录并操作数据库
  15. 二进制数与十进制数的相互转换、二进制数的乘除运算、移位运算
  16. Python爬虫是什么?
  17. 嘉兴 机器人仓库 菜鸟_菜鸟在嘉兴推出全新智能仓 在“双11”启用超级机器人仓群...
  18. python初学者入门小项目之一:在 cowpy中增加自己的人物头像
  19. 云演 CTF Web题型 lfi 文件包含
  20. 计算机毕业设计Java高校排课管理系统(源码+系统+mysql数据库+lw文档)

热门文章

  1. Zookeeper节点详解
  2. 数据库迁移登录名_如何将数据库的登录名迁移到其他服务器
  3. 让您的数据库服务器与您对话:直接从SQL Agent Jobs发送电子邮件
  4. tde数据库加密_在其他服务器上还原启用了透明数据加密(TDE)的数据库
  5. POJ3714 Raid 分治/K-D Tree
  6. Introspector内存溢出的原理解析
  7. [转]Delphi 12种大小写转换的方法
  8. Memcached安装及配置
  9. JS判断日期是否在同一个星期内,和同一个月内
  10. 关于jQuery的细节