多线程与高并发课程 学习笔记

2020-07-24  本文已影响0人  半亩房顶

部分真题

计算机组成原理

进程和线程的本质区别?

进程: 操作系统分配资源的基本单位
线程:CPU调度(操作系统执行)的基本单位
线程切换:线程调度,需要资源占用,所以线程不宜过多

jvm级别的线程

虚拟机的线程和操作系统线程的对应关系?

虚拟机管理线程方式

go routine

go关键词开启一个go routine,对应java的runnable,每次go XXX相当于起一个个任务,扔到一个个队列中,让系统线程去执行,协程,线程比例 为 M:N


为什么用户级别线程提高了效率?

省去了操作系统管理线程的步骤,省去了线程的上下文切换,把切换部分放到了jvm

锁升级初步

对象new出来放到内存中,有四个部分:markwork8字节,class pointer类型指针,4字节,instance实例数据,padding对齐,补到对象空间被八整除为止(为了提高效率。

锁对象如何实现?

锁对象如何实现?

加锁后的对象,markword里面会不一样,markword中装入了锁信息和GC和hashcode

偏向锁?

超线程

什么是超线程?

一个运算单元(ALU)对应两组寄存器(单核多线程),这时的两个线程被同一个运算单元服务,此为超线程

CPU缓存和内存

工业实践,3层最合适




缓存一致性问题

缓存行大小64字节
缓存一致性协议,保证缓存行的一致性
为了避免缓存行中不出现两个变量,从而规避同步成本,可以前后怼7个longInt (8字节),保证不与其他变量在一个缓存行


缓存一致性问题
intel cpu MESI协议

volatile

volatile 由浅入深

如何实现的禁止重排序?

引入一个概念,DCL:double check lock,类似cas
示例代码:

DCL

JSR内存屏障


欢迎大家关注我的公众号


半亩房顶
上一篇下一篇

猜你喜欢

热点阅读