寻找C或C++库提供类似谷歌GO频道的功能

寻找C或C++库提供类似谷歌GO频道的功能,c++,c,multithreading,sockets,go,C++,C,Multithreading,Sockets,Go,…用于多线程网络服务器 我想在多个线程之间传递数据。目前,我使用的是socket,在选择上使用主线程阻塞,在ReV上阻塞工作人员,虽然我觉得C++中有更高级或预先打包的方式来处理这个任务。 < P>可以尝试使用带有特别适合线程间通信的管道和消息队列的ACE库。 **ACE代表自适应通信环境*我会让工作线程在线程池中等待 然后等待select进行读写操作的主机 当数据到来时,主线程会将作业添加到线程池中。在添加每个作业时,一个线程唤醒执行该作业并返回池。这样,您就不会使用recv阻塞在特定端口上等

…用于多线程网络服务器


我想在多个线程之间传递数据。目前,我使用的是socket,在选择上使用主线程阻塞,在ReV上阻塞工作人员,虽然我觉得C++中有更高级或预先打包的方式来处理这个任务。

< P>可以尝试使用带有特别适合线程间通信的管道和消息队列的ACE库。
**ACE代表自适应通信环境*

我会让工作线程在线程池中等待

然后等待select进行读写操作的主机

当数据到来时,主线程会将作业添加到线程池中。在添加每个作业时,一个线程唤醒执行该作业并返回池。这样,您就不会使用recv阻塞在特定端口上等待的线程,并且一组固定的子线程可以处理所有传入的流量

在现成对象中支持此功能的Currentl库:

王牌: Poco: libthread from包含一个非常相似的通道结构;注意Russ Cox对plan9port和go lang的贡献,以及:

卢卡·卡德利和罗伯·派克朝着不同的方向发展 将CSP中的想法转换为Squeak mini语言[4],用于生成用户 接口代码。这种吱吱声不同于吱吱声 实施派克后来将Squeak扩展到了羽翼丰满的 编程语言newsquak[5][6]是计划9的Alef[7]的起源 [8] ,地狱的地狱[9],谷歌的围棋[13]

在Plan 9历史的后期,为了维护两种语言的基础设施付出了太多的努力,因此Alef被中断,CSP构造以libthread的形式移植到C

因此,由于go通道本质上是libthread的直接后代,我认为您不会发现更类似的情况:

通道是固定大小消息的缓冲或非缓冲队列。 TBB中有一个缓冲队列:。
我刚刚在C++11中实现了一种无缓冲通道:。尽管一个更通用的实现是创建一对引用,如Felix中的引用,一个用于通道的每个端点,以便在通道的另一端不再存在时中断任何等待。

可能值得检查。它有一个“inproc”通道,允许您在线程之间进行通信。当然,您只能在线程之间发送字符串,而不能在对象之间发送字符串,但另一方面,它支持TCP/IP等其他传输,因此您可以轻松地在网络上的进程之间进行通信,它是跨平台的,并且具有大多数当前语言的语言绑定。

recv阻塞的原因是什么?我不认为你必须阻止recv,SELECT也是如此,这不是一个bug。当它等待来自主线程的数据时,它在recv上阻塞。我这么说只是为了更好地解释节目的结构。很高兴看到我不是唯一欣赏频道的人。