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

部分真题

计算机组成原理

进程和线程的本质区别?

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

jvm级别的线程

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

  • hotspot jvm线程 和 内核线程 一一对应
  • synchronized(0),需要等待线程执行完毕,jdk1.2之前,由OS帮忙管理线程 -- 重量级锁
  • 无锁 - 偏向锁 - 自旋锁 - 重量级锁(必须让操作系统协助管理,即为重量级)

虚拟机管理线程方式

  • 虚拟出寄存器,虚拟的PC(记录线程切换时执行位置)
  • 管理属于用户控件的线程
  • 轻量级的线程 - 纤程(用户级别线程。go天然支持高并发,意指天然支持纤程/协程

go routine

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


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

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

  • CAS:compare and swap | compare and set
    操作后回写时先查看是否依然为原本值,依然保持则回写;值已经变动则重新取值操作后再回写(自旋锁乐观锁
  • 如何处理CAS的ABA问题:拿出值处理回写时,发现值依然为零,但无法确定这个值是否是被处理过但是又回到了原始值。如何处理?加版本!
  • 自旋锁一定比重量级锁效率高吗?
    自旋锁原地等待,会消耗资源,在线程很多,cpu切换成本过高时则效率并不高
  • cas如何保证了原子性?
    LOCK IF MP(nulti processor)cpu原语支持了比较和修改的原子性,如果是多个cpu,则加LOCK,原本是锁总线,现在是锁北桥信号

锁升级初步

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

锁对象如何实现?

锁对象如何实现?

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

偏向锁?

  • 什么是偏向锁?
    偏向锁没有经过竞争机制,只是将线程id号标记上了,是一种处理机制。
  • 为什么有偏向锁?
    实际使用中,可能只有一个线程在用,为了方便实现,节约时间,出现的偏向锁
  • 偏向锁出现竞争怎么办?
    当有线程竞争时,先进行偏向锁撤销,转化为自旋锁,占用者优先持有,其他线程以cas方式竞争,依然是记录线程id号的方式竞争锁。
  • 使用偏向锁是否一定提升效率?(偏向锁为什么需要延迟4秒钟?)
    明确知道存在竞争时(比如jvm启动时),无需打开偏向锁,因为锁转为自选锁也是需要占用资源的,确定空闲时(默认4s)再打开偏向锁
  • lock 和 synchronized区别?
    lock有公平锁,synchronized没有公平锁
  • 什么是公平锁和非公平锁?
    公平锁(Fair):加锁前检查是否有排队等待的线程,优先排队等待的线程,先来先得
    非公平锁(Nonfair):加锁时不考虑排队等待问题,直接尝试获取锁,获取不到自动到队尾等待
    公平锁和非公平锁

超线程

什么是超线程?

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

CPU缓存和内存

工业实践,3层最合适




缓存一致性问题

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


缓存一致性问题

intel cpu MESI协议

volatile

volatile 由浅入深

  • 线程可见性: MESI
  • 禁止重排序:cpu执行的指令时间远远小于读取内存时间,所以在等待结果之前,会将没有关联关系的后续指令拿来先执行(CPU流水线优化),这称为CPU乱序执行,禁止重排序,则会禁止这种乱序执行(禁止部分指令之间重排序,非全部指令)
    对于代码影响就是,有的赋值代码的实际执行顺序,并不是严格按照代码顺序执行的,影响的其实是汇编代码,但是高级语言中也可以复现

如何实现的禁止重排序?

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

DCL

  • 上图示例中,为什么必要加volatile?


JSR内存屏障


欢迎大家关注我的公众号


半亩房顶
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354