0拷贝
一次普通的文件拷贝需要执行四次上下文切换
mmap+write
sendfile
SG-DMA 完全不会有CPU去拷贝数据
大文件传输
「异步 I/O + 直接 I/O」
为的是不使用pagecache防止pagecache污染
select
将一个建立了连接的socket放入一个文件集合,让内核检查网络事件发生,当检查到有后标记并拷贝到用户态,用户态遍历获取到标记了的事件并处理,两次遍历,两次拷贝
- 使用固定长度的bitmap
poll
使用动态数组,突破了长度限制
epoll
- 使用红黑树
查询插入复杂是log(n)
的 - 使用事件驱动,通过回掉函数注册到就绪事件列表,不需要遍历整个集合
边缘触发,事件只会触发一次一般配合非阻塞IO使用。
水平触发,会多次触发,不一定要一次性读取完毕
reactor
三个对象
- reactor 监听和分发事件
- acceptor 获取连接
- handler 处理业务
单handler处理效率有限 由此引起的可以有
- 多handler handler负责接受数据并发送给子进程处理业务逻辑
- 多级reactor 多级reactor分发事件
Reactor 是非阻塞同步网络模式,感知的是就绪可读写事件
Proactor 是异步网络模式, 感知的是已完成的读写事件
一致性哈希
- 一致性哈希用于解决比如分库分表的情况
- 负载均衡器
- 缓存系统
- 分布式文件系统
一致哈希算法是对 2^32 进行取模运算,是一个固定的值。
但是由于节点分配不均导致的请求集中可以通过虚拟节点来实现