- 主题:有没啥专用于线程间的消息通信的库?
你可能没看明白,阻塞队列和无锁队列是两回事啊!
你想的可能是可并发访问的队列。
而阻塞队列是用于实现生产消费的消息队列。重点是消息队列。有空可以看看各种 MQ 的文档啊。像 Python 和 C# 的 BlockingQueue 都支持取消任务。
【 在 ylh0315 的大作中提到: 】
: 队列这玩意儿,这都是自己写,连公用库都不用,没几句话。(STL里好像有,不过我都是自己写)。
: 加个互斥锁条件锁。而已。
: 还有自己玩无锁队列的,我不喜欢那玩意儿,CPU开销太大。
: ...................
--
FROM 117.28.155.*
.. 直接用现成的组件组合和你从头造轮子哪个更费事?
这个说到底就是生产者消费者模型,条件变量信号量,不是什么高深的技术,都用烂了的。
我用 blocking Concurrent Queue 是因为测试过,确实比我自己手撸的 FIFO 性能要好很多。
定义一个 AppCmd 然后用派生类的方式传递参数和信息是因为我队列可能要处理不同的任务,这样具有普适性。
【 在 ylh0315 的大作中提到: 】
: 哪有那么费事,libc里一大堆pthread_打头的函数。
: 我都是用这些函数进行线程间通信。
: 实在不行,还有fifo,pipe,socket。信号量,signalfd,timerfd,eventfd,epoll。。。。
: ...................
--
修改:speedboy2998 FROM 218.76.62.*
FROM 218.76.62.*
是的啊,网络通信序列化开销较大。但拿着 MQ 的概念来做线程间的通信也有大用处。这个是很通用的概念。像您老这样使用系统 API 来做不是不可以,但太费心力了。
【 在 ylh0315 的大作中提到: 】
: IBM的MQ整过一点,ZMQ也整过,那是网络通信,当然用作线程通信也可以。
--
FROM 117.28.155.*
libuv就可以
【 在 wjhtingerx 的大作中提到: 】
--
FROM 112.97.80.*
你尽可以去测试看看。
【 在 ylh0315 的大作中提到: 】
: 生产者:
: if(!rp) { //需要时才做这一步,这是第一句。
: pthread_mutex_lock(&rpool.mut);
: ...................
--
FROM 222.247.144.*
你这种叫做 naive 实现。没有优化,功能太少,抽象不足。
对于很多 c++ 程序员,可能还是 map, foreach 纯函数会比较好一些。不容易出 BUG,性能也很强。
【 在 ylh0315 的大作中提到: 】
: 熟了没啥。
: 生产者3句,消费者3句。其中用个STL也可以。轮子是不需要的。
: 前边表演一下3句话的使用次序。找到这个次序费了点功夫。
: ...................
--
FROM 117.28.152.*
您想说的时native吧……
【 在 hgoldfish 的大作中提到: 】
: 你这种叫做 naive 实现。没有优化,功能太少,抽象不足。
: 对于很多 c++ 程序员,可能还是 map, foreach 纯函数会比较好一些。不容易出 BUG,性能也很强。
:
--
FROM 183.173.114.*
不是 native,有个词叫做 naive algorithm,可以看看。
在这里 naive 被翻译成朴素,而不是天真。
朴素实现并不是更坏。通常更容易理解与维护。比如 musl 的算法,经常采用比较朴素的算法而不是像 glibc 那样疯狂优化每种 CPU 平台都写个汇编实现。但朴素实现通常也意味着缺少优化,缺少考虑边界场景。
【 在 amony 的大作中提到: 】
: 您想说的时native吧……
--
修改:hgoldfish FROM 117.28.155.*
FROM 117.28.155.*
如果你这个队列需要根据不同的消息执行不同的任务,你怎么处理?
【 在 ylh0315 的大作中提到: 】
: 生产者:
: if(!rp) { //需要时才做这一步,这是第一句。
: pthread_mutex_lock(&rpool.mut);
: ...................
--
FROM 54.193.4.*
你不懂 C++,也不懂抽象。
或者你写的代码没有遇到的场景很单一。
一种消息类型一个队列,你也不怕累死。
【 在 ylh0315 的大作中提到: 】
: 其实这些细节在naive方案里最好解决了,一切你自己定。
: 什么数据结构,什么处理流程,使用什么工具,完全没有限制。
: 如果使用了什么轮子,必须屈从于人家的要求。
--
FROM 218.76.62.*