知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累。不占太多时间,不停的来唤醒你记忆深处的知识点。
一、请求模式
目前 web请求,两种模式: 基于线程模式和基于事件驱动模式
1.1 线程模式
每个请求对应独立线程来处理,比较符合自然思考逻辑。
局限性:占用内存资源、线程间切换开销过大、用户量上来后比较消耗web服务器性能。
解决方案:水平扩展,无状态,分布式,微服务 分散I/O操作。
1.2 事件驱动模式
理念: 请求连接 与 事件处理分离。
二、Reactor模式
Reactor模式是事件驱动模式的一种实现
2.1 单线程Reactor模型
Java Nio 编程中 Selectr 网络连接中,就是一个简单Reactor模式单线程实现。
如:前文提到的例子
2.2 多线程的Reactor
基于线程池处理,让接受到的socket连接请求,可以分发到线程中执行。
2.3 epoll 高效模式
epoll管理模式可以保持大量客户端, 避免轮询每个请求,获取每个请求状态。
epoll_create 创建fd
epoll_ctl fd添加到监听红黑树中
epoll_wait 就绪列表
监听红黑树中有出现有效请求,就让该socket置位就绪状态。
while(true) 只遍历就绪状态的socket即可,提高性能,不需要遍历所有fd,效率高。
领取专属 10元无门槛券
私享最新 技术干货