0拷贝

一次普通的文件拷贝需要执行四次上下文切换

img

mmap+write

img

sendfile

img

SG-DMA 完全不会有CPU去拷贝数据

img

大文件传输

「异步 I/O + 直接 I/O」

为的是不使用pagecache防止pagecache污染

select

将一个建立了连接的socket放入一个文件集合,让内核检查网络事件发生,当检查到有后标记并拷贝到用户态,用户态遍历获取到标记了的事件并处理,两次遍历,两次拷贝

  • 使用固定长度的bitmap

poll

使用动态数组,突破了长度限制

epoll

  • 使用红黑树查询插入复杂是log(n)
  • 使用事件驱动,通过回掉函数注册到就绪事件列表,不需要遍历整个集合

img

边缘触发,事件只会触发一次一般配合非阻塞IO使用。

水平触发,会多次触发,不一定要一次性读取完毕

reactor

三个对象

  • reactor 监听和分发事件
  • acceptor 获取连接
  • handler 处理业务

单handler处理效率有限 由此引起的可以有

  • 多handler handler负责接受数据并发送给子进程处理业务逻辑
  • 多级reactor 多级reactor分发事件

img

Reactor 是非阻塞同步网络模式,感知的是就绪可读写事件

Proactor 是异步网络模式, 感知的是已完成的读写事件

一致性哈希

  • 一致性哈希用于解决比如分库分表的情况
  • 负载均衡器
  • 缓存系统
  • 分布式文件系统

一致哈希算法是对 2^32 进行取模运算,是一个固定的值。

img

但是由于节点分配不均导致的请求集中可以通过虚拟节点来实现