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

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

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

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

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

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

库代码和使用的例子:https://github.com/anthonywei/thrift_cpp_epoll_multi_process
09-05 06:21