zmq的线程模型是基于Poll的,它的socket可以直接放入poll中。在linux下面使用时,可以在zmq的socket的poll组中加入一个timerfd。这样就解决了定时器的问题。timerfd号称精确到us级别。<br />在windows下面使用的时候比较麻烦点,需要在每次recv后重新计算interval,再将此interval作为timeout的参数启动poll,不太精确。计算的时候使用zmq的clock来获取系统时间即可。也许有更好的方法?
timerfd就是内核触发定时器呗,每个os有自己的实现。<br />但是不管开一根定时器线程,还是使用内核定时器通知应用层,都会造成多线程访问单个socket的情况,那么这个时候肯定需要加锁来处理。总不能一遇到多线程访问单个socket就用mailbox来交换吧。而对于加锁这块,zeromq没有做。
还是先写点代码吧,用了这么久还没遇到你说的要加锁的情况。
最近仔细研究了一下zeromq,有相关问题,跟你请教。
最近仔细研究了一下zeromq,想和你一起探讨下。
如果你写过socket用过epoll就不会这样理解了,本质上来说是一个信号量唤醒的机制。ZeroMQ这样的结构就是为复杂业务而存在的,这是一个非常漂亮的异步解决方案,有这样的通讯框架存在能帮助我们非常容易做到无缝升级、灾备、处理能力伸缩等企业级应用需要的解决办法。
同意楼主意见。<br /><br />当服务器端的业务沉重复杂时就无法使用zeromq, 这是因为单线程安全引起的无法异步执行recv和send。
你这太理论了,有没有实际做过?<br /><br /><br />可以考虑当recv后业务很复杂,不得不放到另外的线程工作,那么当计算结果出来后又如何send?<br /><br />目前似乎无办法