Chinaunix首页 | 论坛 | 博客
  • 博客访问: 10964
  • 博文数量: 1
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-06 23:23
文章分类

全部博文(1)

文章存档

2014年(1)

我的朋友

分类: 架构设计与优化

2014-06-18 16:04:56

thirft c++版本的代码,实际上提供了几种server类型,其中常用的是两种,一种是Simpleserver,一种是NonBlocking的server
但这两个版本实际使用的时候都不是很好。

SimpleServer太简单,改造后可以开启多进程,但是单个进程内还是recv+超时的机制。模式很不好

NonBlocking的server又太复杂,需要配合多线程一起使用,而且多线程是把双刃剑,用的好性能不错,用的不好性能可能还不如单进程的

所以我考虑做一个epoll + 多进程的模型,类似nginx,服务启动后首先监听本地端口,然后创建epoll  

然后开启多进程,在每个进程内绑定本地的socket fd到epoll上,然后循环开始服务。

优点:
每个链接是epoll来监听的,不需要给个进程或者线程来单独recv,这个性能其实就算和Nonbloking相比也不输
服务本身是单进程的,模型简单,不需要关心使用的时候线程安全的问题
服务比较独立,吞吐量可以直接采用增加服务进程数的方式完成。
缺点:
这种epoll+多进程的模型容易有惊群效应,但是现在一般的linux内核还是能很好的解决这个问题的。

库代码和使用的例子:
阅读(3221) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~