我正在尝试使用czmq库中的zhash和zactor编写一个基本示例。我想要实现的主要想法是:
我有点迷失为什么这个代码会破坏。每当我到达演员编号60时,应用程序退出:
...
...
58 actor started!
START command received!
59 actor started!
START command received!
60 actor started!
> Assertion failed: (self), function zsock_set_sndtimeo, file
> src/zsock_option.c, line 1344.
> Abort trap: 6
编译:{{1}}
代码如下:
gcc -o demo demo.c -g -lczmq
有什么想法吗?我不明白为什么我达到这个60的数字限制。
答案 0 :(得分:1)
你在使用什么操作系统?是OS / X吗?
当前的actor实现仍然使用PAIR套接字,它们在内部使用实际的文件句柄来发送信号。每个actor都有两个PAIR套接字,每个套接字使用两个文件句柄,所以60个actor = 240个文件句柄。
在OS / X上,每个进程的默认限制为256.您可以提高此值,请参阅:http://zeromq.org/docs:tuning-zeromq
在Linux上,默认值为1024,你可以提高它。在Windows上,您需要重新编译libzmq,并将FD_SETSIZE设置为16K或某些(这是libzmq master现在所做的,但旧版本的值较低)。
相当分开:
你不需要任何构造上的握手,因为这已经由zactor_new()完成,你会看到所有演员在他们初始化时发出信号。
除非您实际测试系统限制,否则创建1024个actor可能过多。演员使用系统线程;为获得最佳性能,您需要每个代码一个线程。为了获得最佳设计,每个并发工作线程有一个线程。