- 摘自jyy课件以及自己笔记
- 对 goroutine介绍 : 线程和协程的结合. 然而我没用过,没啥体会.
计算机网络-传输层-TCP
TCP概述
报文格式、发送方接收方状态机模型、流量控制、拥塞控制、三次握手四次挥手
操作系统-并发03-同步控制
互斥锁 + 条件变量
信号量
哲学家吃饭
操作系统-并发-互斥
互斥困难的根本原因:load 和 store不原子
纯软件层面的互斥算法实现太复杂了,下面借助硬件提供的原子指令 实现比peterson简单的互斥协议。
硬件提供的原子指令如 : x86-64提供的lock ,xchg ; riscv提供的LR/SC(实现CAS)
自旋锁spinlock : 基于xchg实现的spinlock 正确实现临界区互斥。
- spinlock 缺陷。
- 除了进入临界区的线程,其他处理器上的线程都在空转
- 获得自旋锁的线程可能被操作系统切换出去
- spinlock 使用场景
- 内核的并发数据结构
- spinlock 缺陷。
互斥锁mutex : 在spinlock的基础上实现mutex
- 目的 : thread在没拿到锁时不自旋空转占用cpu,而是切换到内核并阻塞,然后内核切换到其他thread执行. 避免浪费cpu
- 由于其目的,故只能是一种syscall
xv6 : when to lock :
- if (2 processes access a shared data structure && at least on is writiter) , then lock the shared data structure
muduo-关于EventLoop的runInLoop与queueInLoop
关于queueInLoop调用时机
并发-互斥算法-Peterson算法
- 不借助硬件支持,在【纯软件】层面实现 【共享内存的互斥】:【Peterson算法】
muduo-EventLoop
EventLoop 类图 及成员 : Channel , Poller , EventLoop
muduo事件通知机制 : eventfd
计算机网络-传输层-可靠数据传输-流水线
rdt3.0 性能问题 :停止等待协议 信道利用率低
因此 需要流水线技术
解决流水线的差错恢复的两种基本方法:
Go-Back-N(GBN 回退N步)
Selective Repeat(SR 选择重传)
- Slide Window 滑动窗口协议
- Sending Window = 1 , Receive Window = 1
- Go BY N 回退N步协议
- Sending Window > 1 , Receive Window = 1
- Selective Repeat 选择重传协议
- Sending Window > 1 , Receive Window > 1
- Sending Window > 1 的协议 称为流水线协议。
bind与shared_ptr
bind : 传递值. 会导致shared_ptr的引用计数++
muduo中TCPConnectionPtr的生命周期介绍
muduo-Buffer
- 整理一下学习收获 先整理下muduo Buffer 因为属于是实现比较简单的组件。还比较巧妙。且便于移植。
- muduo Buffer
- 参考 源码 以及 《Linux多线程服务器编程》