Cloud Native Foundation - Go IO
阻塞 IO
阻塞:
等待数据就绪
阻塞 + 同步
非阻塞 IO
非阻塞:
等待数据就绪
轮询
:效率不高
非阻塞 + 同步
IO 多路复用
(集中线程)阻塞 + 同步
当数据就绪后,集中线程会
唤醒
其他线程,阻塞的仅仅只是一个线程
select / poll
通过
传参
的形式来轮询
fd 列表,长度有上限(1024
)
epoll
通过
mmap
将用户态的内存
和内核态的内存
进行共享
,不再需要传参
,解决了 fd 长度受限的问题
基于
事件侦听
,而非轮询
wq:wait queue
, rdlist:ready list
, rbr:red black tree
Go HTTP:
goroutine 与 fd 绑定
异步 IO
非阻塞 + 异步
异步:
拷贝
数据(Socket 缓冲区
->应用缓冲区
)的过程也是由Kernel
来完成
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.