知识总结 nio

 

BIO,NIO

BIO

  • 阻塞的,效率低下,线程和fd一对一

    NIO 第一版

  • 用户线程不断轮询,线程和fd一对多,但是用户线程需要轮询非常多次,多次调用内核,成本大

    NIO 第二版 select

  • 用户线程调用select,内核做轮询。但是需要传参拷贝fd list

    NIO 第三版 epoll

  • 用户线程和内核共享内存(mmap),解决了传递fd list 的问题

零拷贝

  • 数据不经过内核态,直接指定 in 和 out (sendfile方法)

epoll + 零拷贝 = kafka

  • 生产者写入通过mmap将数据从网卡存储到磁盘
  • 消费者通过零拷贝直接将数据从磁盘发送到网卡