libevent

  具体代码分析见附件!! 对其逻辑分析就不上传了!!

  libevent并不是线程安全的,但这不代表libevent不支持多线程模式,其实方法在前面已经将signal事件处理时就接触到了,那就是消息通知机制!!

看看memcache 基于libevent的实现

 

 可以看到:libevent多线程的实现设计思想为:

消息通知+同步层 并不是完全的消息通知!!!

  纯粹的消息通知机制:1: 当时处理认为A; 2:任务B来了; 3 :此时继续处理认为A; 4 :处理完认为A的时候,检查消息队列 发现有B任务,于是处理B任务;在操作系统的进程通信中,消息队列(消息信箱)都是操作系统维护的,你不必关心。 此时优点是通过消息通知,切换问题省心了(没必要立即响应任务B,避免了中途切换),不过消息是不能立即处理的(基于消息通知机制,这个总是难免的),而且所有的内容都通过消息发送,比如任务的一些附属信息,这无疑增加了通信开销

消息通知+同步层:有个折中机制可以减少消息通信的开销,就是提取一个同步层,还拿上面的例子来说,你把工作安排都存放在一个工作队列中,而且任何人把新任务扔到这个队列or 可以从队列取这个任务

 

posted @ 2020-04-12 16:41  codestacklinuxer  阅读(294)  评论(0)    收藏  举报