80
回答
OSChina 第39期有奖高手问答:Linux 多线程服务端编程
注册华为云得mate10,2.9折抢先购!>>>   

OSCHINA 本期高手问答(8月7日-8月13日)我们请来了 @ChenShuo 为大家解答关于 Linux 多线程服务端编程方面:使用muduo C++网络库的问题。

@ChenShuo 陈硕,擅长C++ 多线程网络编程和实时分布式系统架构。曾在摩根士丹利IT 部门工作5 年,从事实时外汇交易系统开发。现在在美国加州硅谷某互联网大公司工作,从事大规模分布式系统的可靠性工程。编写了开源C++ 网络库muduo,参与翻译了《代码大全(第2 版)》和《C++ 编程规范(繁体版)》,整理了《C++ Primer (第4 版)(评注版)》,并曾多次在各地技术大会演讲。

为了鼓励踊跃提问,@博文视点 会在问答结束后从提问者中抽取 5 名幸运会员赠予《Linux 多线程服务端编程》此书。

OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。

下面欢迎大家就Linux 多线程服务端编程:使用muduo C++网络库方面的问题向 @ChenShuo 提问,请直接回帖提问。
举报
红薯
发帖于5年前 80回/13K+阅

以下是问题补充:

  • @ChenShuo :试读样张: https://chenshuo-public.s3.amazonaws.com/pdf/allinone.pdf (5年前)
  • @ChenShuo :本书上市半年重印两次,总印数达到了9000册。http://blog.csdn.net/solstice/article/details/9352481 (5年前)
共有80个答案 最后回答: 4年前
@ChenShuo : 我来第一个问题吧。muduo 这个名字是怎么来的?正确的发音方法是什么?
--- 共有 4 条评论 ---
panovr我来解释一下(猜测的,因为最近在北京师范大学学习):因为陈硕是北京师范大学毕业的,而木铎金钟正好是北京师范大学校区里面一个标志(正好在北京师范大学主楼的旁边,会堂的前方),因此陈硕用木铎这个词作为他的C++网络库的名字。 5年前 回复
侠少这本书的环衬上有木铎的图案。 5年前 回复
ChenShuohttp://www.oschina.net/question/28_61182 第5问。 5年前 回复
linshell木铎 mù duó 释义:(1).以木为舌的大铃,铜质。古代宣布政教法令时,巡行振鸣以引起众人注意。(2).以喻宣扬教化的人。(百度百科) 5年前 回复
@ChenShuo :我也来个,muduo不同于其他多线程服务的特点在哪呢,常见的多线程服务库可靠性都有哪些指标?
--- 共有 4 条评论 ---
徐庆-neo回复 @ChenShuo : 吼吼,只有拿到书才能学习更多知识喽 5年前 回复
ChenShuo书第 9.2 节。 5年前 回复
徐庆-neo哦,原来如此,那常见的服务可靠性都有哪些指标呢? 5年前 回复
ChenShuohttp://www.oschina.net/question/28_61182 第7问。 库的“可靠性”没有量化指标,服务的可靠性才有量化指标。 5年前 回复
@ChenShuo :书中提到使用google protobuf来做私有通信协议。但是抓包分析是一个问题,有何解决方案?有时候我不想看代码,就想知道BUG大概在哪里? 
--- 共有 4 条评论 ---
newzai回复 @fanyu83 : 需要的实在wireshark里面抓包,直接显示,普通网络技术人员,会wireshark,其它的就难说了。 5年前 回复
fanyu83google内部有codex工具,自己实现也不复杂,http://blog.qq.com/qzone/774789782/1300436796.htm 5年前 回复
newzai回复 @ChenShuo : 那只是个半成品,支持UDP.而且在window下还不是现场的. 5年前 回复
ChenShuoWireshark 有 protobuf 插件。 5年前 回复
@ChenShuo :请问一个问题,在linux下用c++做多线程编程,数据量特别大的时候,需要注意哪些问题?muduo和java的mina、elang对比,有哪些优势和特长?
--- 共有 1 条评论 ---
ChenShuonative 的库和基于VM的库没啥可比性。 5年前 回复

@ChenShuo :C++网络编程方面,ACE库的功能已经很强大了。而且支持的平台也很多了,不仅支持Reactor还支持Proactor,为何你自己还要创建一个库呢?你觉得你的库性能上能比ACE的Proactor更高,使用起来更方便嘛?很多人说ACE太庞大,缺陷太多,确实是,但是如果使用ACE的时候,只使用Reactor或者Proactor,那就没有那么复杂。

muduo复杂度,性能和ACE proactor的优势?劣势?   

--- 共有 6 条评论 ---
先进哥回复 @newzai : 阻塞、IO多路复用、异步,都是不同的方式,select/poll/epoll概念上是IO多路复用,别把多路复用和异步搞混。阻塞或非阻塞socket,都能使用多路复用模式。多路复用方式的具体实现,可以使用同步轮询,也可以是异步信号,并没有强制要求。 4年前 回复
newzai回复 @pikeman_ff : 搞清楚异步和非阻塞的关系。他们不是互斥的。异步IO的前提是非阻塞。这里比较的是IOCP,Select,poll,epoll,AIO等方式的区别。select,poll只是非阻塞模式,并发异步,属于同步IO,而IOCP,epoll属于异步IO,异步IO是建立在非阻塞的基础上的。 4年前 回复
pikeman_ff回复 @newzai : 异步和非阻塞之间的性能比较,我觉得你的理解非常肤浅。特别是在针对socket这块。拿Linux平台来说,目前linux上socket的异步操作是通过信号还通知的,非阻塞是通过专门的系统调用来通知的。对于大量信号的处理,非阻塞的通知方式我认为比异步更高效一些。你对别人的^_^,我认为非常不合适。@ChenShuo. 4年前 回复
newzai回复 @fanyu83 : Netty,使用的是Java的NIO,知道javaNIO是啥码?非阻塞IO而已,连异步都不是。。也就是和ACE 的reactor一样的效率。。要和ACE的Proactor比较性能也只有Java 7 的AIO了。但是AIO毕竟是在虚拟机上,和原生的的二进制能比吗??? 5年前 回复
fanyu83ACE都算强的话,只能哈哈了,应该和Netty这些比 5年前 回复
@ChenShuo :muduo使用C++11的相关技术吗?特别是thread,mutex这块。如果没有,有打算使用吗?不打算的话,基于什么样的考虑?据说C++14要把网络这块的接口也给纳入标准。如果真成为现实,觉得未来的C++网络编程是否还需要第三方网络库?  
--- 共有 3 条评论 ---
ChenShuo回复 @egmkang : gcc 4.7 编译是没问题的,不过一旦使用了新语言特性,就没法在 gcc 4.4 下用了,恐怕真的只能看不能玩了。 5年前 回复
egmkanggcc 4.7.3都支持C++11里面的很多内容,muduo里面主要使用了的是lib,可否考虑移植到C++11上面去.现在debian 7都已经使用gcc 4.7了. 5年前 回复
ChenShuo等主流 Linux 服务器发行版的 gcc 升级到 4.8 就可以考虑用 C++11 了,不过估计不会用其中的 thread 模块。C++ 14 的网络库看起来一点也不好用,我估计大家还是继续用自己的网络库。 5年前 回复
顶部