03 2022 档案
Volatile关键字
摘要:##volatile java中的关键字,可保证并发编程中的可见性和有序性,不能保证原子性。 不能保证原子性的原因: java中只有对基本类型变量的赋值和读取是原子操作,比如 i=1。但是像 j=i 或者 i++ 这样的操作都不是原子操作,因为它们都进行了多次原子操作,比如 i++ 分为 i+1,
阅读全文
java的CAS和cpu汇编中的CAS
摘要:#1、CAS(compare and swap) 理解总线锁和缓存锁后,对CAS就比较好理解了,这不是java特有的,而是操作系统需要保证的。cas指令在intel cpu上成为CMPXCHG指令,他的作用是将指定内存地址的值 与 所给的某个值相比,如果相等,则将其内容替换为指令中提供的新值,如果不
阅读全文
解决cpu高速缓存技术潜在问题:缓存一致性问题
摘要:#1、缓存一致性问题? 为了压榨cpu性能,解决cpu算数逻辑单元(ALU) 直接访问 内存 速度低的问题,cpu 内部有了 高速缓存,把内存中的数据读取到内部 高速缓存 中来,避免直接访问内存,以加快 ALU 频繁读取的速度。我们假设在一台 pc 上只有一个单核的 cpu 和 一份内部高速缓存,那
阅读全文
cpu超线程技术
摘要:我们知道现在的 CPU 至少都是两个核心以上的 多核心CPU 了,但是 Intel 还有个很怪的东西,叫做 CPU 的超线程 (Hyper-Threading) 功能!我们知道现在的 CPU 指令周期都太快了,因此 运算核心 经常处于闲置状态下。 而我们也知道现在的 系统大多都是 多任务的系统, 同
阅读全文
lock指令底层是总线锁还是缓存锁
摘要:##官方文档说明 intel x64开发人员手册之Effects of a LOCK Operation on Internal Processor Caches章节有明确说明 8.1.4 Effects of a LOCK Operation on Internal Processor Cache
阅读全文
CPU层面的总线锁和缓存锁
摘要:##1、缓存一致性 当高速缓存存在以后,每个CPU获取/存储数据直接操作高速缓存,而不是内存,这样当多个线程运行在不同CPU中时。同一份内存数据就可能会缓存于多个CPU高速缓存中,如不进行限制,就会出现缓存一致性问题 CPU层面提出了两种解决办法:1. 总线锁,2. 缓存锁 ##2、总线锁和缓存锁
阅读全文
cpu高速缓存出现原因
摘要:#cpu高速缓存出现原因 现代计算机中,cpu的计算速度是极高的,而内存的存取速度和cpu的计算速度相差100倍左右,如果CPU需要存取数据时都直接与内存打交道,在存取过程中, CPU 将一直空闲,这是一种极大的浪费,所以,为了提高cpu的利用率,CPU 不直接和内存进行通信,而是在 CPU 与内存
阅读全文
怎么理解java内存模型
摘要:##Java内存模型(Java Memory Model ,JMM) JAVA内存模型是JAVA虚拟机用来屏蔽 硬件和操作系统内存 读取差异,以达到各个平台下都能达到一致的内存访问效果。 Java内存模型的主要目的是定义程序中各种变量的访问规则,即关注在虚拟机中把变量值存储到内存和从内存中取出变量值
阅读全文
为什么系统调用比普通函数开销大(用户态->内核态开销大)??
摘要:相比较函数调用时的不到1ns的耗时,系统调用确实开销蛮大的。虽然使用了“快速系统调用”指令,但耗时仍大约在200ns+,多的可能到十几us。 每个系统调用内核要进行许多工作,大约需要执行1000条左右的CPU指令,所以确实应该尽量减少系统调用。 但是即使是10us,仍然是1ms的百分之一,所以还没到
阅读全文
用户态和内核态
摘要:#用户态和内核态 用户态与内核态 当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。 此时处理器处于特权级最高的(0 级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。 当进程在执行用户自己的代码
阅读全文
时钟中断
摘要:计算机中的中断? 中断:是一种异步的事件处理机制,可以提高系统的并发处理能力。 中断可分为 硬中断 和 软中断 硬中断:由硬件产生,比如网卡,键盘,鼠标以及有特殊意义的时钟等。 软中断:仅与内核有关,由当前正在运行的进程产生的中断。 可以说,我们说的高并发和异步处理,在硬件级别依靠的就是中断。只有中
阅读全文