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

混乱的Linux内核实时线程优先级

背景 Linux会把进程分为普通进程和实时进程,普通进程采用CFS之类调度算法,而实时进程则是采用SCHED_FIFO或SCHED_RR。...内核线程的优先级 Linux内核会将大量(并且在不断增加中)工作放置在内核线程中,这些线程是在内核地址空间中运行的特殊进程。...因此也会把这些内核线程放到SCHED_FIFO中去。 那么问题来了,某个内核线程实时优先级到底该设为多少呢?...要回答这个问题,不仅需要判断这个线程相对于所有其他实时线程是否更加重要,还要跟用户态的实时进程比较谁更重要。这是一个很难回答的问题,更何况在不同的系统和工作模式下这个答案很有可能还会各不相同。...所以一般来说,内核开发人员也就是看心情直接随便选一个实时优先级。 现在的一些内核实时线程如下: ?

3.5K10

记一个实时Linux的中断线程化问题

背景 有一个项目对实时性要求比较高,于是在linux内核上打了RT_PREEMPT补丁。 最终碰到的一个问题是,芯片本身性能不强,CPU资源不足,急需优化。...中断线程化回顾 让我们来回顾下中断线程化的知识。 在Linux上,中断的优先级比进程高,一旦中断过来普通进程实时进程通通都要让路,让CPU先运行对应的中断处理程序,这就会对实时造成很大的影响。...为了解决这个由中断带来的实时性问题,或者说由不确定运行时长的中断服务程序带来的实时性问题,RT_PREEMPT补丁引入了中断线程化的机制。...中断线程化之后,中断来了虽然还是会打断实时进程,但所执行的操作只是唤醒中断线程,原本的中断服务程序被放到了一个内核线程中,延迟执行。...1.这个中断服务程序非常简单,没必要线程化。强行线程化对实时的改善不大,反而会带来不必要的开销。 2.这个中断服务程序非常关键,其中采集的数据的实时也非常重要,不应该被延迟执行。

2.1K10
您找到你想要的搜索结果了吗?
是的
没有找到

软中断和实时

软中断和实时 翻译自:Software interrupts and realtime Linux内核的软中断("softirq")机制有些奇怪,在早期的Linux和处理机制下比较晦涩,且仅有极少的内核开发人员会直接接触软中断...在实时处理中,强制任意的进程做一些随机工作的方式并不受欢迎,传统的实时补丁会将所有的软中断隔离到独立的线程中,每个线程都有各自的优先级。...在这样的处理下,如,当网络需要实时响应时,该中断处理的线程的优先级会提高;相反地,当网络事件不那么紧急时,线程的优先级会降低。 从3.0实时补丁集开始,上面的处理方式无法继续工作。...使用这种方式改进了代码质量并提升了非协调系统(通过消除切换到软中断线程的上下文)的性能,但也剥夺了倾向于对这种方式进行细微调整的能力(一些专注实时的开发者非常倾向于使用这种方式)。...参考: Linux中断 - softirq

2K20

实时迷思(3)——80%时间屏蔽了中断,实时还有救么?

---- 在本系列的第一篇文章《实时迷思(1)——快是优点么?》中,我们介绍了实时的基本模型: ?...并得出两个重要的结论: 实时只关注“是否能在实时窗口内完成对应事件的处理”,而与事件处理的快慢无直接关系; 从应用整体的角度来看,实时窗口内越靠前的时间越珍贵; 这个模型本身并不复杂,但 “你以为你懂了...今天我们继续来借助实时模型来研究一个看似铁板钉钉的问题: 当应用在运行时有大比例的时间屏蔽了中断,系统的实时还有救么? 当应该频繁的开关中断,系统的实时还有救么?...【CPU资源磨刀霍霍……】 ---- 一个实时应用中往往不止一个事件有实时性要求,因此,判断系统的实时是否所有保证从来都不是只单纯的在每一个实时窗口内做比较就能解决的。...套用到屏蔽中断对实时的影响上来说: 推论1: ---- 屏蔽中断并不可怕,哪怕积累下来的时间占比很大,只要每次屏蔽的时间足够短,就能有效的减小对系统实时的影响——换句话说,高频率的开关中断很可能还是有益实时

63120

线程安全

一个对象是否需要实现线程安全,取决于它是否会被多个线程访问。要使得对象是线程安全的,需要采取同步机制来协同对对象可变状态的访问。...无状态的对象一定是线程安全的。 原子 竞态条件(Race Condition):计算的正确取决于多个线程的交替执行时序时,就会发生竞态条件。例如“读取-修改-写入”操作和“先检查后执行”操作。...例如count++操作,该操作是非原子的,实际上它包含三个操作:读取count的值,将值加一,将计算出的结果写入count。如果此时多个线程都访问count并++,那么不能保证最后结果正确。...“读取-修改-写入”操作和“先检查后执行”操作统称为复合操作:包含了一组必须以原子方式执行的操作以确保线程安全。 加锁机制是Java中用于确保原子的内置机制。...内置锁可以支持原子和可见性。同步代码块包含两部分: 一个作为锁的对象引用; 一个作为由这个锁保护的代码块; 其中该同步代码块的锁就是方法调用所在的对象。

83630

汇总|实时语义分割算法

【3】基于空间稀疏实时语义图像分割 《Real-time Semantic Image Segmentation via Spatial Sparsity》 链接:https://arxiv.org.../pdf/1712.00213.pdf 对于一个典型的两输入的全卷积网络引入了空间稀疏,展示了在提高Inference速度的同时并没有随时太多精度; 展示了使用空间稀疏,使用in-column和cross-column...这种方式对准确没有任何影响。...译文:该编码器是一个改进的SqueezeNet 架构,它被设计为一个低延迟的网络,用于图像识别,同时保持AlexNet的准确。 ? 实验结果: ?...【7】高效卷积网络用于实时语义分割 实时语义分割的《Efficient ConvNet for Real-time Semantic Segmentation》 链接: http://www.robesafe.uah.es

1.1K10

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

所以Linux中,没有给Linux"线程"去专门设计对应的数据结构!而是直接复用PCB!用PCB来表示Linux内部的“线程”!...也就是说,Linux内核中有没有真正意义的线程,严格上来说是没有的,Linux是用进程PCB来模拟线程的,是一种完全属于自己的一套线程方案。...健壮降低:编写多线程需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者因共享了不该共享的变量而造成不良影响的可能是很大的,换句话说线程之间是缺乏保护的。...编程难度提高:编写与调试一个多线程程序比单线程程序困难得多 健壮举例:一个线程如果出现了异常会影响其他线程:(健壮、鲁棒较差) #include #include <pthread.h...并且在函数内定义的变量都是局部变量具有临时,在多线程情况下也没有问题。

27530

Linux线程线程池】

✨个人主页: 北 海 所属专栏: Linux学习之旅 操作环境: CentOS 7.6 腾讯云远程服务器 前言 线程池是一种管理线程的机制,它可以在需要时自动创建和销毁线程,以及分配和回收线程资源...「最终版」:将线程池改为 单例模式,只允许存在一个线程池对象 这里选择 懒汉模式,因为比较优秀,并且为了确保兼容,选择 经典写法 首先是修改 ThreadPool 为单例模式 头文件 ThreadPool_V4...总之多线程算是正式结束了,下一篇将会打开网络的大门 相关文章推荐 Linux线程 =====:> 【初始多线程】、【线程控制】、【线程互斥与同步】、【生产者消费者模型】 Linux...进程信号 ===== :> 【信号产生】、【信号保存】、【信号处理】 Linux进程间通信 ===== :> 【消息队列、信号量】、【共享内存】、【命名管道】、【匿名管道】 Linux基础IO...】、【vim】、Linux 权限理解和学习、听说Linux基础指令很多?

27640

汇总|实时语义分割算法(全)

我们在上篇——汇总|实时语义分割算法(上篇)中,已经总结了【1】~【12】,这里我们继续。...与FCN集合的等价使ShelfNet能够用一个小的神经网络来执行精确的分割。 ?...ContextNet利用更深层的网络,增加的层数有助于学习更复杂和抽象的特征,从而提高准确,但也增加了运行时间。聚合来自多个分辨率的上下文信息是有益的,结合了多个级别的信息以提高性能。...因此,跨通道和空间相关的计算是独立的,这大大减少了参数的数量,导致更少的浮点运算和快速的执行时间。 ContextNet利用了DWConv,输入下采样的子网使用了DWConv的瓶颈残差块。...arxiv.org/pdf/1902.04502.pdf 我们知道在语义分割中较大的接受野对于学习目标类之间的复杂关联(即全局上下文)很重要,图像中的空间细节对于保持目标边界是必要的,需要特定的设计来平衡速度和准确(

1.1K10

Linux——多线程

之前创建一个子进程室友自己的独立的,如果今天创建多个进程,和第一个进程指向同一个PCB,看到是同一块虚拟地址空间,然后让每个这种“进程”执行虚拟地址空间中的部分代码,这些“进程”就叫做线程。...在Linux中,什么是线程呢?是CPU调度的基本单位。 在Linux中,一个线程被称为轻量级进程。...这是因为Linux没有真正意义上的线程。...(并不是线程越多越好,要合适,最好要和CPU的核数相同) 健壮降低 编写多线程需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者因共享了不该共享的变量而造成不良影响的可能是很大的...Linux的方案;用户级线程,这些属性在库中,内核提供线程执行流的调度。 Linux用户级线程:Linux内核轻量级进程 == 1:1 那么线程的id究竟是什么呢?

87930

Linux线程

线程是进程内部的一个执行流,在Linux下并没有为线程额外创建数据结构来管理,而是通过只建立PCB来模拟实现的;但是在Windows下为了管理线程又创建了TCB内核数据结构来管理; Linux这种方式一方面是提高了代码的复用率...,而是线程线程的资源是占用进程的,所以进程其实是分配操作系统资源的基本单位 Linux下进程和线程的关系: 之前我们接触的都是单进程多线程或者多个单线程进程 3.线程的数据属性 一个进程内部的线程共享大部分的资源比如...2、健壮(鲁棒)降低 ​ 编写多线程需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者因共享了不该共享的变量而造成不良影响的可能是很大的,换句话说线程之间是缺乏保护的。...,而其他新创建的线程使用的则是在线程库在共享区维护的线程栈(线程当然是要被管理的,只不过是由线程库来进行管理) 2.线程局部存储:全局变量是所有线程都可见且可修改的,如果在内置类型前加上__thread...那么该全局变量则会映射到新线程线程栈中,此后如果某一个线程修改了该全局变量不会影响到其他线程 ---- 线程控制 1.创建多线程Linux下连续创建10个线程,将自定义类对象传到新创建的线程

15930

Linux线程互斥

也就是它不具备原子! 另外,我们不仅仅在对 ticket- -,这种叫做数值计算,而且还在对 ticket 做判断是否大于0,这个过程也是在对 ticket 计算,这种叫做逻辑运算!...互斥锁接口 在 Linux 中,pthread 库给我们提供了一种互斥锁解决上面多线程访问共享数据不一致的问题。...这就可以让所有的线程获取钥匙,按照一定的顺序,这种按照一定顺序获取资源的称为同步,这个我们后面详谈。...每一个线程进入临界区访问临界资源的时候,首先需要申请加锁,所以锁本身就是共享资源,也就是临界资源!所以申请加锁和解锁本身就被设计为原子的操作了!如何做到的呢?我们后面讲原理再谈。...为了实现互斥锁操作,大多数体系结构都提供了 swap 或 exchange 指令,该指令的作用是把寄存器和内存单元的数据交换,由于只有一条汇编指令,保证了原子

10510

线程安全-有序与总结

一、有序 java内存模型中,允许编译器和处理器对指令进行重排序,但是重排序过程中不会影响到单线程程序的执行,却会影响到多线程并发执行的正确 volatile、synchronized、Lock...有序-happens-before原则(八个原则) 1.程序次序规则:一个线程内,按照代码顺序,书写在前面的操作现行与书写在后面的操作 2.锁定规则:一个unlock操作先行发生于后面对同一个锁的lock...:Thread对象的start()方法先行发生于此线程的每一个动作 6.线程中断规则:对线程interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生 7.线程终结规则:线程中所有的操作都先行发生于线程的终止检测...总结:如何两个操作的执行顺序无法从这八个原则推导出来,就不能保证他们的有序,虚拟机就可以随意的对他们进行重排序 线程安全-总结 原子:Atomic包,CAS算法,synchronized,Lock...可见性:synchronized,volatile 有序:happens-before原则 每天 进步一点点 ?

34330

【java并发编程实战1】何为线程安全线程安全

线程问题,一直是我们老生常谈的一个问题,在面试中也会被经常问到,如何去学习理解多线程,何为线程安全,那么大家跟我的脚步一起来学习一下。...线程安全 定义: 当多个线程访问某个类时,不管运行时环境采用何种调度方式 或者这些线程如何交替执行,并且在主调代码中不需要任何额外的同步或者协同,这个类都能表现正确的行为,那么称这个类时线程安全的。...线程的安全主要体现在三个方法 原子:即不可分割,提供互斥访问,同一时刻只能有一个线程对它进行操作 可见性:一个线程对共享变量的修改,可以及时被其他线程观察到 有序:序在执行的时候,程序的代码执行顺序和语句的顺序是一致的...1、原子 1、访问(读/写)某个共享变量的操作从其执行线程以外的线程来看,该操作要么已经执行结果,有么尚未执行,也就是说其他线程不会看到“该操作执行了部分的效果”。...3、有序 在JMM(java 内存 模型)中,运行编译器和处理器对指令就行重排序,但是重排序过程不会影响到单线程程序的执行,却会影响多线程并发执行的正确

83830
领券