libevent实现多线程
来源:互联网 发布:unity3d工程师简历 编辑:程序博客网 时间:2024/06/04 18:01
libevent并不是线程安全的,但这不代表libevent不支持多线程模式。
前几天在微博上看到ruanyf发了条微博说到apache和nginx的并发模型,看到评论很多人都说不对
于是自己又查了下,总结一下我所学过的网络库或者网络服务器的并发模型
1、muduo:one loop per thread,主线程注册listen事件,通过某种负载均衡机制(round robin)将连接的事件注册到子线程的Reactor上,据说也是Netty的方案,最近也正好在学netty,刚好可以验证一下。
另外,muduo还提到了一个runInLoop()
的功能:如果用户在当前线程调用,则回调functor会同步进行,如果在其他线程调用,则IO线程会被唤醒执行这个functor。这种跨线程调用是如何实现的?因为其他线程很可能阻塞在Reactor上。传统方法是用pipe(后面将提到memcache的多线程),在muduo里面是用eventfde(2)
,将回调放入线程的任务队列,并发送一个uint64大小的消息来唤醒Reactor。
2、nginx:master + worker的工作模式,ruanyf的微博说是master接受连接分配给worker,事实上不是这样的,master只是通过信号管理worker进程,worker之间通过accept_mutex来决定是否将监听套接字加入到loop中。所谓的one loop per process
3、libevent:这是在网上找的资料,libevent并不是线程安全,但不代表其不支持多线程。memcache的网络部分使用libevent,有一个经典的图描述了其多线程实现:
这种消息通知+同步层的机制,通过pipe和一个加锁的任务队列(CQ)实现。与muduo的eventfd效果类似。
- libevent实现多线程
- libevent 多线程实现高并发
- 用libevent多线程方式实现echo server
- 基于libevent的多线程通信框架实现
- 基于libevent的多线程通信框架实现
- libevent提取里面的多线程实现
- libevent 多线程
- libevent多线程
- libevent多线程
- libevent多线程
- libevent多线程
- libevent实现多线程,one loop per thread,多线程通信
- libevent多线程编程
- libevent多线程使用事项
- libevent多线程使用事项
- libevent 多线程调用event_base
- libevent多线程编程实例
- libevent多线程服务器
- centos7安装putty
- 获取父级元素
- HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误
- 堆、栈
- 设计原则之旅(二):开闭原则
- libevent实现多线程
- Ubuntu14.04 安装git
- 省市三级联动(数据库)
- web开发 如何防止重复提交
- RabbitMQ 高级指南:从配置、使用到高可用集群搭建
- ACK flood攻击的影响
- 【持续更新】python与centos7使用过程中的问题解决方案
- 推荐算法简述
- 最详细的 TabLayout 的用法