多线程的弊端是需要CPU上下文切换,代价很高.

如何用单线程来处理大量客户端的同时连接呢?

DMA控制器,专注于I/O.

Linux中一切皆文件,每一个网络连接,都有一个文件描述符(fd),


方式一: 轮询.

即用一个while(1) 死循环


方式二: select,poll,epoll

用户态和内核态切换,也有一定开销

select这个API在198x年就有了,到现在还有部分系统在使用

Redis,Nginx,Java中的Nio(Linux版),其底层都是使用epoll实现的

思考:

  • 为什么SSD比机械硬盘快?
  • 哪些数据库对SSD进行了优化?
  • 这些优化基于什么原理?