ZeroMq实现跨线程通信
之前在技术崇拜的技术经理指导下阅读了ZeroMq的基础代码,现在就将阅读的心得与成果记录一下,并重新模仿实现了一下经理的异步队列。
1、对外接口
//主要接口
(1)void *ymq_attach (void *ctx_, int oid, void* sink_); (2)void *ymq_detach (void *ctx_, int oid); (3)void *ymq_register_timer (void *ctx_, int oid, int timeout, int id_); (4)void *ymq_unregister_timer (void *ctx_, int oid, int id_); (5)void *ymq_send_asyn_msg (void *ctx_, int oid, ymq_msg_t* msg);
struct ymq_msg_t;
//对外接口类 class i_asyn_obj_events { public: virtual void attach_event () = 0; virtual void detach_event () = 0; virtual void timer_event (int id_) = 0; virtual void message_event (ymq_msg_t* id_) = 0; };
接口(1)用于初始化一个异步对象(后面有对异步对象的阐述),并在几个具有事件监控能力的线程中选择一个负载最少的线程作为异步对象托管线程。
接口(2)暂时没有实现的功能,用于从托管线程中分离的接口。
接口(3)在一个被托管了的异步对象上注册一个定时器。
接口(4)撤销定时器
接口(5)向对应ID的被托管的异步对象发送消息
接口类的4个接口函数分别对应的功能是:当异步对象被托管成功后发生的事件、托管分离时发生的事件,定时器产生事件,和异步消息到达事件。
2、后续。。。
时间已经很晚,休息了,继续总结。