NetMq套接字是线程安全的吗?

Evg*_*nov 3 c# multithreading zeromq low-latency netmq

我使用私有字段(PushSocket- zmq_push socket for netmq)

private PushSocket _pushSocket;
Run Code Online (Sandbox Code Playgroud)

以及在不同线程中使用此套接字的两种方法

public void Method1()
{
    //.....//
    _pushSocket.SendFrame(....);
    //.....//
}

public void Method2()
{
    //.....//
    _pushSocket.SendFrame(....);
    //.....//
}
Run Code Online (Sandbox Code Playgroud)

我应该使用lock或其他同步原语吗?

use*_*197 5

没有,

在理解ZeroMQ专业级建议1 的基础上:
不得设计具有线程间共享套接字的代码.

按照设计,Ş calable ˚F ormal Ç ommunication P atterns (又名有点误导昵称为插座(S))不是线程安全的(并且从未试过如此).
ZeroMQ

一个人的能力以某种方式调解线程间信令并不是一种信念,这是一个主要的信念,即良好的可扩展并行代码永远不会共享或阻塞.

因此说ZeroMQ传福音.

困惑?NP.
愤怒?NP.
零共享,零锁定 - 尝试将其视为某种形式的避免碰撞,而不是必须从不受控制的并发混乱的烧毁中剔除灰烬.


如果有疑虑

一个是最好的选择,阅读Pieter HINTJENS的书"Code Connected.第1卷"并花些时间与Pieters对可扩展代码设计原则的看法.

你很快就会爱上新的思维方式ZeroMQ.