zeromq vs nanomsg
zeromq是作者用cpp早期创作,作者承认存在一些明显问题;nanomsg则是用C写的,更为成熟
参考官方链接
- POSIX: zeromq 不完全遵守
- threading model: zeromq中单个对象由唯一一个线程管理,当使用用户线程管理该对象时有一些问题
- IOCP: zeromq的windows IOCP不支持
- 触发方式: zeromq的socket在外部轮询时是边缘触发(edge),而nanomsg是条件触发(level)
- routing priorities: nanomsg有routing priorities
- DNS query: zeromq的DNS query是同步的,DNS无法获取时会导致整个库hung
- zero-copy: zeromq在传入内核后会按照tcp方式进行拷贝;而nanomsg则有RDMA/shmem实现真正的零拷贝
- 订阅匹配: zeromq中是simple trie; nanomsg是Patricia trie,后者内存使用率更高
- simple trie每个节点是单个字符;而Patricia则是字符串,将可共享的字符串合并为同一个节点
- Unified Buffer Model: nanomsg统一使用tcp的buffer, 而zeromq有一个mq+tcp buffers