站在巨人的肩膀是骗人的
2013年(28)
分类: C/C++
2013-04-14 10:52:24
anderslane2013-04-25 22:13:34
moon_rock:timerfd就是内核触发定时器呗,每个os有自己的实现。
但是不管开一根定时器线程,还是使用内核定时器通知应用层,都会造成多线程访问单个socket的情况,那么这个时候肯定需要加锁来处理。总不能一遇到多线程访问单个socket就用mailbox来交换吧。而对于加锁这块,zeromq没有做。
还是先写点代码吧,用了这么久还没遇到你说的要加锁的情况。
回复 | 举报moon_rock2013-04-24 12:34:55
anderslane:zmq的线程模型是基于Poll的,它的socket可以直接放入poll中。在linux下面使用时,可以在zmq的socket的poll组中加入一个timerfd。这样就解决了定时器的问题。timerfd号称精确到us级别。
在windows下面使用的时候比较麻烦点,需要在每次recv后重新计算interval,再将此interval作为timeout的参数启动poll,不太精确。计算的时候使用zmq的clock来获取系统时间即可。也许有更好的方法?
timerfd就是内核触发定时器呗,每个os有自己的实现。
但是不管开一根定时器线程,还是使用内核定时器通知应用层,都会造成多线程访问单个socket的情况,那么这个时候肯定需要加锁来处理。总不能一遇到多线程访问单个socket就用mailbox来交换吧。而对于加锁这块,zeromq没有做。
anderslane2013-04-24 12:04:18
zmq的线程模型是基于Poll的,它的socket可以直接放入poll中。在linux下面使用时,可以在zmq的socket的poll组中加入一个timerfd。这样就解决了定时器的问题。timerfd号称精确到us级别。
在windows下面使用的时候比较麻烦点,需要在每次recv后重新计算interval,再将此interval作为timeout的参数启动poll,不太精确。计算的时候使用zmq的clock来获取系统时间即可。也许有更好的方法?