不落辰

知不可乎骤得,托遗响于悲风

0%

TCP概述
报文格式、发送方接收方状态机模型、流量控制、拥塞控制、三次握手四次挥手

阅读全文 »

  • 互斥困难的根本原因:load 和 store不原子

  • 纯软件层面的互斥算法实现太复杂了,下面借助硬件提供的原子指令 实现比peterson简单的互斥协议。

  • 硬件提供的原子指令如 : x86-64提供的lock ,xchg ; riscv提供的LR/SC(实现CAS)

  • 自旋锁spinlock : 基于xchg实现的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
阅读全文 »

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的引用计数++
muduo中TCPConnectionPtr的生命周期介绍

阅读全文 »

  • 整理一下学习收获 先整理下muduo Buffer 因为属于是实现比较简单的组件。还比较巧妙。且便于移植。
  • muduo Buffer
  • 参考 源码 以及 《Linux多线程服务器编程》
阅读全文 »