Zeromq 学习笔记2 - 邮件槽 线程间通信

说一下 zmq 的通信机制 mailbox 主要用于 io线程之间 io线程和 socket 之间的通信 。

mailbox 主要有两个实现 一个是 mailbox_t 另一个是 mailbox_safe_t

区别 mailbox_t 是一对一通信多个生产者对一个消费者  mailbox_safe_t 多个生产者对多个消费者

mailbox_t 中有两个核心的属性 _cpipe _signaler

_cpipe 消息队列 未实现线程安全

_signaler 信号 负责阻塞和通知

class mailbox_t : public i_mailbox
{
.......
cpipe_t _cpipe;
signaler_t _signaler;
.......

}

signaler_t  在linux下 使用socketpair 实现的 win下用 CreateEventW 实现的

int rc = socketpair (AF_UNIX, type, 0, sv);
    if (rc == -1) {
        errno_assert (errno == ENFILE || errno == EMFILE);
        *w_ = *r_ = -1;
        return -1;
    } else {
        make_socket_noninheritable (sv[0]);
        make_socket_noninheritable (sv[1]);

        *w_ = sv[0];
        *r_ = sv[1];
        return 0;
    }

发送信号时

void zmq::signale
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值