免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: windoze

[C++] 开源项目Fiberized.IO召唤测试 [复制链接]

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
发表于 2014-08-05 16:02 |显示全部楼层
回复 19# cobras

async cancelation永远是不可靠滴,即使在Windows下,很多async cancelation操作也需要底层支持,并不能保证可用性。
另外,fd经过async cancelation操作之后,不能保证能继续使用。

论坛徽章:
0
发表于 2014-11-12 18:16 |显示全部楼层
回复 1# windoze

下次用tcpcopy压测一下,200k QPS 很厉害


   

论坛徽章:
0
发表于 2014-12-02 11:26 |显示全部楼层
你好,我对fiberized.io 挺有兴趣。想试用一下。但我不知道它能不能适应我的应用场景。
我的服务在收到请求后还要和其他的几个服务交互才会完成工作。而我又不想在处理每一个请求的时候都去新建一个tcpstream去连接其他的服务并完成交互。我希望各个服务之间的连接是相对固定的(可以是连接池,也可以是每个线程有一个专用的连接)。如我所愿的话,就会存在多个请求(fiber)共用一个连接去和其他服务交互的情况。不知道fiberized.io能不能应付这种情况。
例如:N个请求通过一个连接去和另一个服务交互,每个请求都一个自己的req_id, 在向另一个服务发送请求的时候带上这个req_id. 当收到响应的时候根据req_id找到对应的请求然后继续执行。  fiberized.io能解决这个问题吗?

   

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
发表于 2014-12-02 13:38 |显示全部楼层
回复 23# dive_

这种场景你可以用连接池,无论是std::thread还是fibio::fiber其实方法都是一样的。

建立一个跨thread/fiber共享的list,里面保存所有已经建立的连接,当你需要获得一个连接时,从这个list里取出一个来,用完了再放回去。
如果list是空的,你有两种选择,一是创建一个新连接,但这样可能会导致服务端连接太多;要不然就等待其它人归还一个连接。如果是后者,你需要在这个list上应用一些同步机制,fiberized.io里有一个concurrent_queue可以用来干这个(这是一个模板类,同时适用于std::thread和fibio::fiber),需要的时候从queue里pop一个,用完了再push回去,pop的时候如果队列空则一直等待到有人push为止。

对比std::thread,fiberized.io的主要优势在于提高并发能力,尤其是对于app server层,因为这一层往往需要在处理客户端请求的同时访问各种后端的服务,自身的计算任务比较少,如果使用std::thread,可能你需要创建很多个才能让负载能力达到要求(Tomcat缺省配置是500),但这样会导致大量的thread context switch,而fiber的切换成本低很多,所以在这种场景里效率会比较高。

论坛徽章:
24
狮子座
日期:2013-12-31 10:48:0015-16赛季CBA联赛之吉林
日期:2016-04-18 14:43:1015-16赛季CBA联赛之北控
日期:2016-05-18 15:01:4415-16赛季CBA联赛之上海
日期:2016-06-22 18:00:1315-16赛季CBA联赛之八一
日期:2016-06-25 11:02:2215-16赛季CBA联赛之佛山
日期:2016-08-17 22:48:2615-16赛季CBA联赛之福建
日期:2016-12-27 22:39:272016科比退役纪念章
日期:2017-02-08 23:49:4315-16赛季CBA联赛之八一
日期:2017-02-16 01:05:3415-16赛季CBA联赛之山东
日期:2017-02-22 15:34:5615-16赛季CBA联赛之上海
日期:2017-11-25 16:17:5015-16赛季CBA联赛之四川
日期:2016-01-17 18:38:37
发表于 2014-12-02 15:30 |显示全部楼层
回复 1# windoze


    真 V5 {:3_189:}

    Win32/MinGW 环境能用么,刚刚调通 Win32/MinGW 环境下 Apache Thrift 的 TNonblockingServer。 不过我目前也不需要很多并发,最多几百个,桌面项目,不是服务器。

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
发表于 2014-12-02 15:52 |显示全部楼层
回复 25# zhujiang73

因为我手头没有可用的Windows机器,所以目前应该还不行。
不过因为Fiberized.IO所用的所有基础组建都支持Windows,所以应该工作量不大,只要找到开发机要不了几天……

论坛徽章:
0
发表于 2014-12-02 17:29 |显示全部楼层
回复 24# windoze

谢谢,我会尝试一下,搞定以后向你报告。

   

论坛徽章:
0
发表于 2014-12-02 18:04 来自手机 |显示全部楼层
楼主棒棒哒。

我们做web,就是用类似的思想,nginx加lua顺序代码全异步。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
发表于 2014-12-05 15:49 |显示全部楼层
windoze 发表于 2014-03-21 16:09
如果你习惯于写每连接一个线程的程序,那试试这个吧 Fiberized.IO
你可以继续使用原来的模型,只需要把thr ...

怎么make?

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
发表于 2014-12-05 17:22 |显示全部楼层
回复 29# yulihua49

  1. cmake /path/to/fibio
  2. make
  3. make test
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP