当前位置:  技术问答>linux和unix

求推荐Linux下利用epoll实现大规模并发服务器架构设计与实现方面的论文or书籍。

    来源: 互联网  发布时间:2017-03-21

    本文导语:  最近因为需要,随着考虑的深入,并发性的要求提高,框架必须划分读,处理,写,三部分逻辑,配合线程池,内存池,环形队列,epoll实现高并发服务器。 实现中,发现还是有一些地方要做特别的同步处理。 比如...

最近因为需要,随着考虑的深入,并发性的要求提高,框架必须划分读,处理,写,三部分逻辑,配合线程池,内存池,环形队列,epoll实现高并发服务器。

实现中,发现还是有一些地方要做特别的同步处理。

比如epoll先后监听到同一个SOCKET两次数据到来,第一次的读任务被加入队列,但还未执行,那么第二次的读任务如果也加入队列,之后两个任务被线程同时处理,都读同一个SOCKET就会有问题,所以这里我选择用mutex lock 住recvfrom,每一个线程里都是recvfrom到EWOULDBLOCK才退出。 这种情况下可以用ET模式,不会遗落未读数据。 这要求每一个SOCKET都要有自己的mutex保护recvfrom.

另外一种想法是LT模式,外加一个mutex保护的标记数组来保证一个SOCKET只有一个线程在读,虽然有一些时序问题,但以来LT模式"总是通知"的特点,时序问题就被忽略了,但Epoll却大量的返回造成主线程轮询。

再就是针对每一个SOCKET读到的数据,我考虑都放入每个SOCKET各自的数据队列中,并且有一个公用的任务队列用于通知处理线程该处理哪一个SOCKET的数据.

比如读线程读了一个报文,加该SOCKET对应的数据队列锁,将数据写入该SOCKET对应的数据队列,并加锁给公用待处理任务队列加入该SOCKET fd,唤醒一次处理线程。

这样,处理线程根据待处理任务队列就知道要读哪个SOCKET的数据队列,处理之后还是放到该SOCKET待写出队列,不过要有序号问题。

明天再写。。。哪里不对,请高人立即指正,谢谢。

|
不如直接看看nginx源码,多进程单线程 epoll

|
呵呵,你试着找找看 cwinux 的说明,好像和你要做的事情非常接近.

epoll好像有边沿触发模式,你说的问题大概能避免.

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.print类docflavor的类成员方法:推荐的 docflavor定义及介绍
  • 谁给推荐推荐几本xml的好书?
  • PHP介绍及学习网站推荐
  • 望大家向我推荐推荐!
  • HTML 编辑器-免费的HTML编辑器推荐
  • 麻烦诸位前辈推荐推荐一款适合底层开发的Linux版本!
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 求推荐,我想试着学习怎么写makefile,请问大家有什么书推荐吗?
  • HTML 学习总结及下一步学习教程推荐
  • [推荐]请大家推荐几个学linux的好网站吧
  • 我是菜鸟,要安装Linux,不知道那个版本适合我,大虾们给推荐推荐吧
  • 推荐系统 EasyRec
  • 论坛 iis7站长之家
  • 开源推荐系统 LensKit
  • 推荐系统 Wuawua
  • 开源推荐系统 Myrrix
  • 【一周话题】推荐两本C++的书,大家有什么好书推荐一下吧
  • 推荐系统 SVDFeature
  • 推荐好的Linux书
  • linux书推荐!
  • 我要换手机,大家给推荐一款吧!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3