channel发送数据和接收数据的过程

  • 发送数据
    • 无初始化的channel会死锁
    • 已关闭的channel会panic
    • 写是存在阻塞的读G,则写入并唤醒
    • 如果无存在阻塞的读G,有缓冲就查看是否有空位有的写入空位
    • 缓冲都没空位就陷入阻塞
  • 接收数据
    • 无初始化的channel会死锁
    • 已关闭的channel会返回空值
    • 无缓冲
      • 存在阻塞的写G,读并唤醒写G
    • 有缓冲,会先看是否有空位,无内容就G阻塞并写入读队列,有内容就读缓冲