文章目录
前言
学习链接 : 链接点击跳转
同步
什么是同步??
- 例子
生产者-消费者模式
- 测试代码的正确性
条件变量
分析
- 把
pc.c
中的自旋变成睡眠 - 测试不通过
- 尝试在完成操作时唤醒
- 尝试在完成操作时唤醒
条件变量
API
条件变量:实现生产者-消费者
- 解决方案 ; 设置俩个不同类型的 条件变量
- 多一点线程
- 10
信号量
复习:互斥锁和更衣室管理
操作系统 = 更衣室管理员
先到的人 (线程)
成功获得手环,进入游泳馆
*lk = 🔒,系统调用直接返回
后到的人 (线程)
不能进入游泳馆,排队等待
线程放入等待队列,执行线程切换 (yield)
洗完澡出来的人 (线程)
交还手环给管理员;管理员把手环再交给排队的人
如果等待队列不空,从等待队列中取出一个线程允许执行
如果等待队列为空,*lk = ✅
管理员 (OS) 使用自旋锁确保自己处理手环的过程是原子的
-
更衣室管理
完全没有必要限制手环的数量——让更多同学可以进入更衣室
管理员可以持有任意数量的手环 (更衣室容量上限)
先进入更衣室的同学先得到
手环用完后才需要等同学出来 -
“手环” = “令牌” = “一个资源” = “信号量” (semaphore)
哲学家吃饭问题
初始的时候 每个哲学家只有一把叉子
因为每人都只拿左手的叉子 , 导致
总结
真实世界的并发编程
高性能计算中的并发编程
- 超级计算(目前) : 把同多个步操作 分给多个cpu 然后汇总起来 (eg 。 拓扑结构 计算二维dp)
- 超级计算机 : 分哪些机器 , 再想机器上有哪些进程 最后线程是如何通信的
- MPI接口 同步的库: 多节点程序 如何保证多节点发消息通信同步
数据中心里的并发编程
- 特点
- 在俩个数据中间是有延迟的 ,CAP是不可能同时三个都做到的
- such 1 second 完成 1w的请求??
- . QPS:全名 Queries Per Second,意思是“每秒查询率”
- tail latency 尾延迟
- 实现切换 存在代价
go
- go的 canal 相对于队列 (也可以实现容量)
- go : 不用和c 一样去约束 ,实现 xx并发协议 (贴纸 。。) , 直接做就就可以 (PC 模式) 解决高并发 IO的问题