- 论坛徽章:
- 15
|
本帖最后由 yulihua49 于 2015-04-09 21:05 编辑
lims_xlh 发表于 2015-04-09 17:49 ![]()
在采用asio coroutine多线程网络的时候,每个线程绑定到一个io_service,这样的话怎么在不加锁的情况下使用s ...
我这两天正做这个,快成了,还在调试。
三维的连接池管理。
一个服务器多个连接。
多个服务器组成cluster。有负载均衡和容错功能。
多个cluster构成一个路由系统,根据需求选择路由(应用路由,或称交易路由)。
AIO coroutine 线程池 epoll 都用上了,看来还工作的不错,就是容错还有些问题,过几天就可能调好了。
不过,任何一个server并不绑定线程。客户端、线程、协程、服务器的连接,谁也没绑定谁,乱跳。线程锁是少不了的,不过设计好了,它并不影响性能。
压力测试,看日志,各种资源的随机组合,眼花缭乱的。
其实线程锁并不是那么可怕。影响性能的首要因素是写日志。其次是epoll的激活过程(单个epfd每秒最多激活15万次,与核和线程数无关)。这俩其实也是锁,内部的,你管不了。其它锁对性能对影响可忽略不计。
没用boost,担心其性能。
用的ucontext,担心将来系统不支持。
将来有空研究下 setjmp/longjmp 的实现方法。 |
|