求小伙伴们,推荐一款 c/c++成熟高性能的队列,谢谢

2018-04-29 11:00:01 +08:00
 duanhui8
场景:200-400 线程同时向队列中写入消息,每秒写入次数大概 7000+,每次写入 100 byte 左右
消费端,由多线程消费,将消息取出并通过 socket 发送出去。

小伙伴有没有高性能的队列推荐啊?要支持多线程读写,并且要安全,性能尽量好点,c/c++代码
另外这种场景非阻塞队列更适合吧?
不想去百度,怕被坑,求小伙伴们推荐,谢谢
8825 次点击
所在节点    程序员
45 条回复
mattx
2018-05-01 19:56:15 +08:00
@cholerae 问下 这个是不能保证顺序的对吧?
fakevam
2018-05-01 21:14:39 +08:00
@duanhui8 你没明白我啥意思, 通过 socket 去做队列, 不写队列那么复杂的东西了, 当然, 几万的 tps, 你就是 stl 加锁, 性能也毫无问题, 不要小看现在的 cpu...

直接 libevent, consumer 监听一个本地的 unix domain sock, 所有的 producer 连接 unix domain sock, 然后往里面写, consumer 负责从里面读, 读出来以后, 写到后端 db, 怎么会增加数据库的性能压力...

当然,你就是 stl + lock 也毫无问题, 不要过早优化, 不要过早优化, 不要过早优化, 重要的事说三次, 在你没有压测之前, 把各种乱七八糟的东西都丢掉! 简单的 lock 可以解决 99%的问题, 特别是啥 spinlock 和 lockless lockfree, 把他们当彻底忘记掉, 他们没有意义, 除非你要 ns 级别的延迟.

我特别特别讨厌各种东西, 上来就是复杂设计, 简单的设计, 测过了才知道, 起码拿着 perf 之类的看过了, 热点到底在哪里, 而不是想当然的各种轮子往上套, 套出一堆复杂得没办法维护的东西出来
superzmy
2018-05-01 21:19:27 +08:00
我这边有一个多线程写单线程读(或者读加锁把数据复制到栈上)的缓冲池,就专门适应这种网络收发。
测试性能 25Mqps ( 2500 万次 /s )实际工作性能 8M qps,或者说 800 万次 /s。数据不定长,跟上面的 concurrencyqueue 定长类型是不一样的。
不过代码不会免费分享
haibocui
2018-05-01 21:33:09 +08:00
一个线程一个队列
duanhui8
2018-05-02 09:02:21 +08:00
@fakevam 嗯嗯,谢谢分享你的经验,知道了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/450852

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX