首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux内核调度算法(2)–CPU时间片如何分配

就是在这颗CPU上,会比较均匀的把时间分配给这几个nginx worker,每个worker进程运行完一个时间片后,内核需要做进程切换,把正在运行的进程上下文保存下来。...内核分配时间片是有策略和倾向性的。换句话说,内核是偏心的,它喜欢的是IO消耗型进程,因为这类进程如果不能及时响应,用户就会很不爽,所以它总会下意识的多分配CPU运行时间给这类进程。...虽然内核尽量多的分配时间片给IO消耗型进程,但IO消耗进程常常在睡觉,给它的时间片根本用不掉。很合理吧? 那么内核具体是怎么实现这种偏心呢?...这个时间片执行完后,就会根据它的初始优先级来重新分配时间片,优先级为+19时最低,只分配最小时间片5ms,优先级为0时是100ms,优先级是-20时是最大时间片800ms。...,则只能分到最小时间片5ms,nice值是默认的0则能分到100ms。

6.9K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    cpu,核心数,线程抢占式分配理解,时间分片机制总结,进程和线程关系及区别,

    知识点: 1,进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是分配资源的基本单位,线程是进程的一个实体,是CPU调度和分派的基本单位 2,线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制...2,一个进程包含一个或多个线程; 3,同一个进程中的多个线程之间可以并发执行. 4,一个程序至少有一个进程,一个进程至少有一个线程. 5,线程是CPU分配时间的单位,通常一个CPU内核处理器可以处理一个线程...10,当计算机运行的进程中所有线程数大于cpu线程数的时候,操作系统会采用时间片机制:为每个线程分配时间额度,如果当前线程时间额度用完了,就会被强制停止(不考虑优先级等机制),切换其他线程执行;这样会给人一个计算机能够同时处理很多线程的错觉...cpu了 2,一个公式:线程池设定最佳线程数目 = ((线程池设定的线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目 这个公式的线程cpu时间是预估的程序单个线程在...但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配 18,进程多还是线程多的选择:线程执行开销小,但不利于资源的管理和保护,如果频繁启动关闭则最好使用线程;而进程正相反。

    1.4K20

    线程的notify方法_forkjoinpool默认线程数量

    (图1-2); (图1-2) 2.再次进入方法,可以看到最终又调用了一个notify方法,继续跟进 (图1-3) 好了,在这里是真正的核心逻辑了 (图1-4): 首先有一个policy策略(默认为...) Policy=3:判断cxq是否为空,如果为空,直接放入头部,否则放入cxq队列末尾位置 其余情况:直接唤醒线程(unpark) 但这几乎是不可能的,因为jdk默认策略为2 且jvm参数不可修改(除非直接更改源码打包...0)默认是0 Qmode=0的判断逻辑就是先判断entrylist是否为空,如果不为空,则取出第一个唤醒,如 果为空再从cxq里面获取第一个唤醒 最后看看唤醒的方法ExitEpilog: 总结: 线程的...notify/nofityAll方法在jvm源码中并没有唤醒线程,而是从waitSet链表取出一个节点进行挪动(根据policy策略,默认为2,判断entrylist是否为空,为空就放入到entrylist...线程节点在多线程环境下操作时,在三个集合中不断地转换,但同一时间只能在某一个集合中,不能多个集合同时存在。 2.线程的其他方法? 这些问题将在后续文章中解答…感谢各位的阅读。

    48410

    谈谈 Ops(三):事务、团队和时间分配

    作为普通的开发人员,我们会遇到对于时间分配的思考,没有金标准,只有某些看起来也未必靠谱的 “最佳实践”。不同人眼中对于整体的时间分配也有自己的看法,这篇文章旨在探讨其中的一两种情况。...于是就有人说了,开发人员没有那么多时间去创建这些工具,所以我们需要 Ops 团队。...Ops 的时间比例 无论是否 “正确” 或 “合理”,基于现有的这般事实,我们在评估和衡量 Ops 时间比重的时候,要积极考虑。对于绝大多数团队来说,Ops 不应当成为团队最大的时间投入。...对于现有 Ops 压力过载的问题要花大量时间去分析和规划,而不是定义数量上的目标来关闭问题。问题的分析时间往往要大过问题的解决时间。...如果这样做了,就要承担数倍于原有时间等工程开销的后果—— 和其它软件工程的问题一样,Ops 没有银弹。

    61810

    Linux 内核 内存管理】伙伴分配器 ② ( 伙伴分配分配内存流程 )

    文章目录 一、伙伴分配分配内存流程 1、查询 n 阶页块 2、查询 n + 1 阶页块 3、查询 n + 2 阶页块 一、伙伴分配分配内存流程 ---- 伙伴分配器 以 " 阶 " 为单位 , 分配.../ 释放 物理页 ; 阶 ( Order ) : 物理页 的 数量单位 , n 阶页块 指的是 2^n 个 连续的 " 物理页 " ; 页 / 阶 概念参考 【Linux 内核 内存管理...】伙伴分配器 ① ( 伙伴分配器引入 | 页块、阶 | 伙伴 ) 博客 ; " 伙伴分配器 " 分配内存流程 : 假设要 分配 n 阶页块 ; 1、查询 n 阶页块 查询当前是否有 空闲的 n...阶页块 , 如果有则 直接分配 , 如果没有 , 则进入下一步 , 查询 n + 1 阶页块 ; 2、查询 n + 1 阶页块 查询当前是否有 空闲的 n + 1 阶页块 , 如果有 , 将...n + 1 阶页块 分成 2 个 n 阶页块 , 一块插入 空闲 n 阶页块链表 ; 一块 直接分配 , 如果没有 , 则进入下一步 , 查询 n + 2 阶页块 ; 3、查询

    7K50

    C++ 为进程、线程分配 CPU 资源

    Intel的自动降频技术和windows的机制冲突:windows有一个功能是平衡负载,可以将一个线程在不同时间分配到不同CPU,从而使得每一个CPU不“过累”。...因此,将线程(进程)绑定到指定CPU核心,从而不让windows自作主张帮我们分散任务,从而提高单线程效率是很有必要的。 而在 C++ 编程中可以实现任务的 CPU 分配。...C++ 实现 CPU 分配 进程分配 CPU 资源 核心函数为 setProcessAffinityMask, 为指定进程的线程设置处理器关联掩码,官方文档。...线程分配 CPU 资源 核心函数为 setThreadAffinityMask , 设置指定线程的处理器相关性掩码,官方文档。...因此,当进程相关性掩码为该处理器指定 0 位时,线程关联掩码不能为处理器指定 1 位。 为进程或线程设置关联掩码可能会导致线程接收的处理器时间较少,因为系统被限制在特定处理器上运行线程

    3.1K70

    线程池数量以及队列长度如何分配

    首先我们几乎可以忽略队列本身占内存的情况,主要考虑多线程取队列数据竞争问题以及线程数量 1.关于线程线程数不能太少,太少了极有可能造成等待/排队时间过长 线程数也不能太多,占用过多内容 而线程池以及线程数的选用真正线程数的选用主要看压测...,看看处理时间 2.线程池的分配方式 单一变量原则,我们可以固定我们的线程数量来进行压测看看,比如说我们固定要创建64个线程,那么可以有以下几种线程分配方式 单队列多线程 1*64 多队列单线程 64...*1 多队列多线程 M*N=64 3. 3种方式主要区别在哪里呢?...如果我们是单队列多线程,那么就存在一个多个线程去同一个队列中抢夺资源的情况 而多个队列单线程,则没有竞争问题,但是存在另外一个问题,如果我们某个队列放了一个非常耗时的数据,比如说50s处理完,那么分配给这个队列的请求全部进入等待队列...通常情况下慢查询比较多可以少队列,多线程,如果查询速度非常快,可以偏向于用多队列单线程,选择方向即少竞争,少阻塞,最终配置要看压测,这玩意很玄,想直接数学计算不太行

    1K40

    Java用户线程和守护线程线程默认Daemon值是false吗?

    文章目录 用户线程 守护线程 必须要在start()方法之前设置守护线程 线程默认的daemon值 总结 Java中通常有两种线程: 用户线程和 守护线程(也被称为服务线程) 通过 Thread.setDaemon...(false)设置为 用户线程默认为用户线程) 通过 Thread.setDaemon(true)设置为 守护线程 线程属性的设置要在线程启动 之前,否则会报 IllegalThreadStateException...线程默认的daemon值 首先看一下创建线程源码,Thread类的init()方法 也就是说线程的daemon的默认值取决于父线程的daemon值,当父线程为用户线程,子线程默认是用户线程,当父线程为守护线程时...,t1线程为t2线程的父线程线程是否为守护线程默认取决于父线程的值,也就是说t2默认线程类型和t1一样的,都为守护线程。...来设置线程是否是守护线程 setDaemon()方法必须在线程的start()方法之前调用,在后面调用会报异常,并且不起效 线程的daemon默认值和其父线程一样。

    74020

    Linux LVM分区的创建、分配

    许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用时可能不得不备份、删除相关数据,甚至被迫重新规划分区并重装操作系统,以满足应用系统的需要...LVM是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上、文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性。...RHEL5默认安装的分区格式就是LVM逻辑卷的格式,需要注意的是/boot分区不能基于LVM创建,必须独立出来。...创建卷组 vgdata ,并将刚才创建好的两个物理卷加入该卷组.可以看出默认PE大小为4MB,PE是卷组的最小存储单元.可以通过 –s参数修改大小。...修改成普通Linux分区即可。 总结:LVM逻辑卷是Linux里面一个很棒的空间使用机制,因为分区在没有格式化的情况下是没有办法加大或者放小的。通过LVM可以将你的磁盘空间做到灵活自如。

    6.6K20

    python程序默认执行与多线程

    一、程序执行流程和进程线程简述 1程序执行流程 有类似脚本程序或编程经验的同学都知道,程序默认是自上而下,从左到右的按顺序执行,也叫串行执行;而多线程类似于并行执行,即A模块(函数)执行时B也执行不需要等...A执行完再执行,这里请区别对待并发执行(同一时间执行);以上是简单概念性描述, 2什么是线程与进程?...想像一个场景,我们在看一部电影时,要是默认串行执行,先放图像 再放电影中的声音,能接受吗?...所谓的多线程并不是同一时刻而是在很多的时间内进行了切换,而人的感观只要超过1/12之秒基本等同于同一时间,从上面的started 140049239336704 可以看出纳秒级别,时间上基本是同一秒,所以这首...可以看出无论是串行执行还是多线程并行执行,计算结果一样,但花费的时间线程并没有少于串行执行,反而略多,在python2.x上差距会更多,而上面的例子是IO密集型多线程明显要优于串行.

    70030

    Linux】多线程——线程概念|Linux下进程与线程|线程控制

    透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流 不同平台的多线程底层实现策略不一样,我们讨论Linux平台 进程对应的模型:进程的创建实际上伴随着其进程控制块...3.Linux线程是CPU调度的基本单位,而进程是承担分配系统资源的基本单位 4.进程用来整体申请资源,线程用来伸手向进程要资源 5.Linux中没有真正意义的线程。通过进程模拟。...健壮性降低:编写多线程需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者因共享了不该共享的变量而造成不良影响的可能性是很大的,换句话说线程之间是缺乏保护的。...--- 三、Linux下的进程与线程 进程是承担分配系统资源的基本实体,线程是调度的基本单位 线程共享进程数据,但也拥有自己的一部分数据: 线程ID、一组寄存器(存储每个线程的上下文信息)、栈(...任何Linux操作系统都必须默认携带这个库,这个库称为原生线程库。

    40930
    领券