计算机操作系统学习笔记(4)——伪共享

简介: 计算机操作系统学习笔记(4)——伪共享

一、伪共享

多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享。伪共享只是影响性能,并不会带来程序上的错误

伪共享被称为并发编程的隐形杀手,因为开发者很难感知伪共享问题

对于多个线程共享的热点数据,即经常会修改的数据,应该避免这些数据刚好在同⼀个 Cache Line 中,否则就会出现为伪共享的问题。

其实很简单,就是2个线程x和y分别操作2个变量A和B,如果x操作了A就会使A所在的缓存行变为失效状态,恰巧A和B在一个缓存行,
B也会失效,那线程y想操作B的时候只能从内存中获取,缓存就没起作用了

解决方法

我们可以凑齐不够的字节,补满64字节,牺牲空间换时间,因为一般缓存行的大小为64字节

JDK8解决伪共享问题可以使用@Contended注解,JVM需要添加参数 -XX:-RestrictContended才能开启此功能

在类上应用@Contended,会使他的所有成员变量都填充,在字段上添加就只填充这个字段

二、任务调度

Linux下分为实时任务和普通任务,实时任务总是会⽐普通任务优先被执⾏。

如果你想让某个普通任务有更多的执⾏时间,可以调整任务的 nice 值, 值越低,表明优先级越⾼

因此 nice 值调整的是普通任务的优先级。

我们可以在启动任务的时候,可以指定 nice 的值,⽐如将 mysqld 以 -3 优先级:

如果想修改已经运⾏中的任务的优先级,则可以使⽤ renice 来调整 nice 值:

nice 调整的是普通任务的优先级,所以不管怎么缩⼩ nice 值,任务永远都是普通任务,如果某些任务要求实时性⽐较⾼,那么你可以考虑改变任务的优先级以及调度策略,使得它变成实时任务

相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
29天前
|
存储 安全 固态存储
计算机启动:从插上电源到操作系统启动的全过程
当我们插上电源,计算机从休眠状态苏醒,直至操作系统完全启动,这一系列复杂的过程涉及到硬件和软件的多个层面。本文将详细解析计算机插上电源后操作系统所做的工作,揭示这一过程的技术细节。
40 6
|
7月前
|
存储 Unix Linux
手写操作系统(4)——计算机是如何启动的?BIOS、GRUB、文件系统......
手写操作系统(4)——计算机是如何启动的?BIOS、GRUB、文件系统......
135 1
|
4月前
|
存储 算法 网络协议
了解操作系统的基本原理和常见操作,提高计算机使用效率
了解操作系统的基本原理和常见操作,提高计算机使用效率
60 4
|
4月前
|
运维 安全 Linux
计算机架构“寒武纪爆发”,操作系统进化迸发中国浪潮
计算机架构“寒武纪爆发”,操作系统进化迸发中国浪潮
|
5月前
|
Linux 调度
部署02-我们一般接触的是Mos和Wimdows这两款操作系统,很少接触到Linux,操作系统的概述,硬件是由计算机系统中由电子和机械,光电元件所组成的,CPU,内存,硬盘,软件是用户与计算机接口之间
部署02-我们一般接触的是Mos和Wimdows这两款操作系统,很少接触到Linux,操作系统的概述,硬件是由计算机系统中由电子和机械,光电元件所组成的,CPU,内存,硬盘,软件是用户与计算机接口之间
|
6月前
|
运维 安全 Linux
计算机架构“寒武纪爆发”,操作系统进化迸发中国浪潮
计算机架构“寒武纪爆发”,操作系统进化迸发中国浪潮
|
7月前
|
存储 算法 Linux
【计算机操作系统】深入探究CPU,PCB和进程工作原理
【计算机操作系统】深入探究CPU,PCB和进程工作原理
217 1
|
7月前
|
监控 Linux 调度
操作系统学习笔记(一)
在Linux中,使用`ps -aux | grep PID`来查看特定进程的状态,或者用`top`指令监控进程和内存。通过`cat 文件名 | grep 关键词`或`grep -i 关键词 文件名`搜索日志文件。`grep`是一个强大的文本搜索工具,支持多种参数,如`-i`忽略大小写,`-c`计数,`-f`从文件读取关键词。要临时更改主机名用`hostname 新主机名`,永久更改则用`hostnamectl set-hostname 新主机名`
48 0
|
7月前
|
消息中间件
操作系统学习笔记(二)
进程切换比线程切换更消耗资源,因为进程切换需保存更多上下文,包括地址空间、寄存器、栈和文件描述符等,还要刷新TLB。线程切换仅需切换硬件上下文和内核栈,上下文更小,所以开销低。进程间通信有多种方式,如匿名管道(父子进程间)、命名管道(无亲缘关系进程)、信号、消息队列、共享内存和信号量等。这些通信方法各有特点,适用于不同场景。例如,匿名管道是半双工的,有名管道允许任何进程通过路径通信,信号用于进程间的简单通知,消息队列支持随机查询和按类型读取,共享内存允许多进程共享数据,而信号量则用于同步和控制对共享资源的访问。
47 0
|
7月前
|
存储 缓存 安全
【linux基础(八)】计算机体系结构--冯诺依曼系统&操作系统的再理解
【linux基础(八)】计算机体系结构--冯诺依曼系统&操作系统的再理解

热门文章

最新文章