2KB项目,专业的源码交易网站 帮助 收藏 每日签到

【2KB开源交流】Muduo 作者陈硕访谈实录

  • 时间:2019-06-04 02:44 编辑:2KB 来源:2KB.COM 阅读:549
  • 扫一扫,手机访问
  • 分享
摘要: 关于开源访谈 开源访谈是开源中国推出的一系列针对国内优秀开源软件作者的访谈,以文字的方式记录并传播。我们希望开源访谈能全面的展现国内开源软件、开源软件作者的现状,着实推动国内开源软件的应用

关于2KB开源交流

2KB开源交流是2KB开源推出的一系列针对国际优秀开源软件作者的访谈,以文字的办法记录并转达。我们渴望2KB开源交流能全面的展现国际开源软件、开源软件作者的现状,真实推动国际开源软件的运用与展开。

【嘉宾简介】

陈硕 北京师范大学硕士,擅长 C++ 多线程搜集编程和实时分布式系统架构。现任职于香港某跨国金融公司 IT 部门,从现及时外汇生意系统开拓。编写了开源 C++ 搜集库 muduo; 参与翻译了《代码大全(第二版)》和《C++ 编程规范(繁体版)》,拾掇了《C++ Primer 第4版评注版》;曾多次在各地技能大会演讲。

【软件简介】

muduo 是一个基于 Reactor 方式确当代 C++ 搜集库,它采用非阻塞 IO 模型,基于工作驱动和回调,原生支持多核多线程,适宜编写 Linux 处事端多线程搜集运用次序。视频连接:http://v.youku.com/v_show/id_XNDIyNDc5MDMy.html

【访谈实录】

1.    你先引见一下你自己吧,包括学习经历和Task经历
我2000年上大学,本科和硕士都是在北京师范大学,学的是电子信息专业(原本的无线电系)。2007年硕士毕业到上海Task,在摩根士坦利信息技能有限公司。到了2010年6月份,公司调我到香港Task,摩根士丹利亚洲有限公司。我第一份Task到现在已经做了五年,没有换过。我Task的内容不时是用C++开拓实时外汇生意系统。

2.    你学的是无线电,跟编程还是有点差异
我们学院的课程设置中,打算机系和电子系重合的部分很大。电子系也解说C言语、数据结构、汇编言语、打算机组成事理、打算机搜集、打算机图形学等等偏CS的课。此外我自学了把持系统课,编译事理也学了一点外相。因此我算是半个半路落发。

3.    那你们电子方面能否是用 C 用的比拟多?
假设从电子系传统来讲的话,是硬件描画言语(Verilog)和 C 用的比拟多。但现在国外嵌入式中 C++ 运用也十分多,从厂家供应的Tools链和各大嵌入式会议的议题就能够看出来。国际的话激进见解权利比拟大,巨匠觉得其他言语不成靠,摸不透,不愿意换其他生产力更高的Tools。单片机上用 C 比拟多,我写过8-bit单片机上的C次序。可是稍微大一点的32-bit单板机上就可以够用 C++,只需能跑把持系统的就能够跑 C++,有C++编译器就能够跑。

4.    是什么促使你开拓Muduo这个搜集库的呢?
我的兴味是分布式系统,可是搞分布式系统的前提是要有一个足够好的搜集库。我有十分多想法要写,比如说完成consensus 的Paxos算法,还有其他一些分布式的协议的完成。在写这个搜集库之前,我看了一些另外C/C++搜集库,觉得还是自己写一个比拟靠谱。此外一个启事是2010年3月份,我写了一篇博客,关于 ACE 的,它是一个陈腐的 C++ 搜集库,博客文章叫《学之者生,用之者死——ACE历史与简评》。我在文中描画了我对搜集库功用需求的了解。因为2010年我已经Task三年,写了十分多搜集相关的次序。所以我决定按照我对搜集库功用需求的见解,完成一个契合我价值观的搜集库。此外,muduo不只是一个搜集库,它还包括基本的线程库、日志库、日期时间库等部分,可以算作一个基础库。总之我认为编写C++多线程处事端搜集运用次序所需求的功用在muduo里都有,muduo表示了我对这个范围的了解。

5.    为什么要叫Muduo这个名字,如何念呢?
通俗可以念成拼音,木铎(念:夺)。“木铎”是木舌金铃的意思,引申义是教诲转达,摇铃铛以吸引行人留心。我选这个名字还有其他几点思考。首先这个名字要用作 namespace(命名空间),就跟 boost 一样,所以不能太长,敲键盘要比拟便当。Boost 是五个字母,C++ 标准库std是三个字母,我觉得还是不要逾越五个字母为好。然后名字不能是英语单词,因为五六个字母的英语单词肯定已经被用掉了,你搜这个单词就搜不到我。也不能都用首字母缩写,多么就只能按字母来念(就像HTTPS)。库的名字要能顺口念出来,一两个音节最好。中国人能读,老外也能读得***不离十,所以不能用xue之类的拼音。综合一下这些条件,选择也就不多了。选这个名字我还是花了一点心思,最后想到了北师大的校徽,干脆就用muduo了。

6.    Muduo这个域名拿下了吗?
我拿了一个 muduo.info 的域名。muduo.net 是北师大的校园网,muduo.com 也是别人在用,muduo.org 是一个人博客。我2010年的时分没有想着去拿域名,事前这三个主流的域名就已经被注册了,比来想拿就只能拿一个 muduo.info 的。

7.    Muduo绝对另外搜集库来讲,它的优势和特征是什么呢?
先说特征。Muduo有一个很清楚的特征是不成移植的。通俗的搜集库会把跨平台可移植看成一个卖点。而我特别选择只在 Linux 上完成并优化,这个算是特征。因为大范畴分布式系统但凡城市在Linux上开拓布置,支持其他平台没有多大意义,我个人精神与知识面也不够。还有一个特征是只支持 TCP。有的搜集库会以支持TCP、UDP、ICMP、串口等各种协议为卖点,muduo则不然。Muduo的特征是只支持 TCP ,而且只支持 IPv4。因为我不认为开拓公司内部应用的分布式系统会用到其他传输协议,更不会在内网用IPv6。muduo只支持one event loop per thread这一种并发模型,只应用非阻塞IO,因为这是Linux下应用native言语编写高功用搜集次序最成熟的方式,Muduo适宜编写有较多并发TCP长连接的搜集处事。甚至连 DNS 分析都只支持异步的分析,没有间接的一个函数调用就能够从域名拿到 IP,因为多么会阻塞。总之,我认为在开拓公司内部系统中用不到的Tools我都没有支持,muduo是有清楚的适用范围的,它不是那种大而全的搜集库。减少选择,让你节省时间,少走弯路。
再说优势。优势之一是API设计。Muduo是一个今世的 C++ 搜集库。今世和当代的API差异在于两方面。一个是工作回调,此外一个是本钱管理。通俗的搜集库设计API的办法是界说一个接口(笼统基类),包含几种搜集工作对应的处理函数。你的代码去承袭这个接口,这个接口会界说收到消息是回调哪个虚函数,然后你掩饰一下这个虚函数。然后把你的Tools注册到搜集库中,爆发工作的时分就回调你的虚函数。通俗的 Framework 都这么搞,这就是传统的也许说当代的 C++ 搜集库的做法,也是Java搜集库的做法。这类做法在C++中面临的一个间接问题是Tools的生命期管理,因为C++的静态绑定只能颠末指针和引用来完成,你必须把基类指针传给framework,才华获得工作回调。那么这个派生类Tools甚么时分销毁就成了难点,它的一切权终究归谁?有的搜集库甚至在工作处理函数中出现了delete this;这类代码,让人捏一把汗。
我现在的回调办法是用boost::function,它在TR1时已经进入 C++ 标准库。Boost::function不对类型和函数名做限制,只对参数和前去类型做部分限制。假设你颠末传统的承袭往复调的话,你这个类型必须是framework里某个基类的派生类,函数的名字必须一样,参数列表必须一样,前去类型也基本必定是一样。可是boost::function没有这些限制。Muduo搜集库不是一个面向Tools(object-oriented)的库,它是一个基于Tools(object-based)的库。它在接口上没有表现出承袭的特点,它用的是boost function的注册/回调机制,搜集工作的表示就用 boost function。所以对Muduo来讲,它不需求知道你写什么类,也不强迫承袭,更不需求知道你的函数叫什么名字,你给它的就是一个 boost functionTools,限制就很少。而且你没有把Tools指针传给搜集库,那么就可以够按本来的办法管理Tools的生命期。
还有一个优势就是本钱管理,Muduo在一处最关键的地方用了引用计数(Reference Counting)型智能指针,当然我没有自己写,用的是标准库的shared_ptr。我只在表示 TCP 连接的class上应用了引用计数,是因为TCP连接是短折Tools(short-lived)。可是当连接自动断开的时分,搜集库不能立刻销毁Tools,因为用户可能还持有它的引用,准备用来发消息。假设间接delete,有可能构成空悬指针。因此既然TCPTools是搜集库和用户代码共同具有,那就用引用计数好了。Muduo用引用计数是经过仔细思考的,也没有效在其他长命的Tools上,这些长命Tools的生命期可以由用户代码间接管理。用Muduo你就不用担心指针失效的问题,可以避免一些陈腐的 C++ 次序中的一些内存差错。
这类用Tools来封装文件描画符等系统本钱的做法是C++独有的本钱管理办法,称为RAII。颠末把文件描画符的生命期与Tools划一起来,我们还能有效地避免串话(cross talk)。比如说,把持系统给你一个新的TCP连接,文件描画符就是一个小整数,这个整数可能便是刚才封锁的某个TCP连接的文件描画符。比如你现在有一个连接号是3,你把连接关了再掀开有可能还是3,所以就带来连接管理方面的一些费事。假设你是用 C 写,不警觉的话就会构成你这里关了3这个连接,可是次序其他地方还在往3这个连接发消息(思考多线程的话更头疼),但真实3这个连接已经指向其他地方了,就跟应用野指针一样。用RAII就没有这个困扰,因为3这个连接的生命期和Tools绑定,Tools活着,连接就不会封锁,也就不会有其他Tools同时应用了3这个文件描画符。
最后,Muduo的功用也是让人满意的。我在编写Muduo的时分没有以“高功用”为主要目标。在完成并开源当前,受网友启发,拿它和其他一些搜集库做了功用对比,创造比拟通用的跨平台搜集库(libevent2、Boost.Asio),muduo有清楚的功用优势。比拟专用的搜集次序(Nginx,ZeroMQ),muduo的功用也不落下风。

8.    也就是说在本钱管理方面是比拟可靠的,不会混淆和不会走漏
是的,首先是本钱在不用的时分肯定会释放,其次是颠末Tools来管理文件描画符可以有效地防止串话。

9.    Muduo目前的奉行是如何履行的?
我重要在博客上写一些文章,没有特别的奉行。有点线下活动会参与,讲讲这个项目。

10.   那这个项目目前在理论产品中的运用怎样?
我们公司不用muduo,公司有自己的搜集库,在我参与之前就成熟了。从个人邮件来往看的话,有人在学,有人编译了试用。具体能否哪个公司在用我也不清楚。Muduo的特征之一是它代码只需5000行,假设你细心读一遍,花一个星期了解透,然后自己写一个更好的也可以。不一定非要用我这个原装版的。关于 C++ 搜集编程的技艺啊,骗局啊都在代码里,而且写的很清楚。Muduo的代码是写出来给人看的。Muduo的目的之一也是放在何处让人学的,所以为什么叫木铎,这个名字也有呼应的含义,刚才也说过了。

11.    根据你刚才的描画,那开拓和维护Muduo的人员该当也只需你一个吧
是的,只需我一个,在Task之外的业余时间开拓。

12.    能否人提交过 bug fix 也许 pull request 之类的?
这个项目在 Google Code,源代码是在 Github 上管理的。有一个 Pull Request,但不是针对代码的,而是针对编译选项的。是关于 boost 库的一个警告,可是我查了一下,该当是 boost 的问题,我向 boost 提交了这个 bug,看他们修不修吧。

13.    那平均一周你花费多少精神在开拓和维护Muduo这个项目上面呢?
要看我能否新的想法。比如上周我就花了十分多时间把多线程非阻塞日志库写好了,花了一全体周末。往常的话可能一周看都不看。旧年花了挺多时间是要写博客,写各种例子。Muduo这个库的例子很丰富,编译出来约莫有近百个可实行文件,各种搜集编程常常运用的功用都有,例如聊天,文件下载,广播等等。而不像有点搜集库只需一个 echo 的例子。

14.    你是2010年末尾做的吗?
我是2010年三月份末尾做,到八月份的时分就开源了。理论上我写了一两个月写完了可是没有立刻开源,因为那会儿正好从上海搬场到香港,杂事十分多。在开源当前重要Task就放在写例子上。写到11年底,我阿谁博客系列写完了,没有更多简练的例子可以写了。然后我就末尾做此外一个项目,是用Muduo和 Google Protocol Buffer RPC 做一个分布式系统中的多机处事管理软件,还没做完。

15.    我们一天按8小时算,你觉得到目前为止花费在Muduo上的时间能否一个月?
一个月以上

16.    那差不多两个月的时间?
算两个月吧。真实学习思索的时间十分多,我有时分看到一篇博客,影响了我的想法,就会把这个思路完成一下。

17.    目前看来你该当是没有从Muduo获得任何月入?
没有月入

18.    那你觉得你做这个任务和你的全职Task有冲突吗?
我觉得没有冲突,理论上能帮我更晴天文解 TCP 搜集编程。我们在公司用必定是用写的很好的(现成的)搜集库。正常情况下,搜集库就是收发数据而已。那假设搜集出问题,运用次序有哪些异常的表现的话要写过搜集库才清楚,不然的话就只能看另外搜集库的文档,查不出来问题的根在哪儿。对公司来讲,这是有正面意义的,假设公司的处事创造搜集方面有问题,特别是在跨洲的搜集状况外面,例如伦敦发到纽约这类,你就会有一些思路,多是某某问题,该当怎样确认,确认当前可以如何调一下。

19.    你的老板知道你做了Muduo多么的一件任务,就是你业余也会做些开拓,写写博客之类的?
我老板估计不知道,其他组有几个同事知道。我比来一年来没有写长篇博客,因为2KB平台博客不再支持Live Writer公布,而我通俗喜好同时发到cnblogs和cppblog这几个地方。

20.    呵呵,那该当他知道了也不会在乎这个任务吧
该当是吧,我们公司对开源有比拟清楚的政策,不能触及公司的信息。Muduo的编写也没有应用任何公司本钱,我甚至向来没有在公司的机械上下载编译过源代码。

21.    上次我跟你聊的时分,我记得你关于颠末Muduo获得月入是很稳重的,因为你是全职在摩根士丹利Task,是吗?这是在你的歇息公约上注明的吗?
我们员工举动准绳有一个叫做益处冲突条目,其中一条是不能颠末摩根士丹利雇员的名头来取利。因此我在个人活动中不能宣称自己是摩根的雇员,以免惹起遥想。敝公司对员工在Task之外的举动恳求比通俗的公司要严峻。

22.    Muduo将来的展开标的目标你有过思考吗?
我是2010年8月份推出0.1.0版,到2012年5月份是0.3.5,它是每0.0.1增加所以一共有25个版本。0.3.5及其之前的版本都是 alpha 版,我上个星期(2012年6月初)推出的0.5 beta 版。这个 beta 版的差异在于它有一个理论可用的日志库。之前的 alpha 版日志只能写到屏幕,现在加了文件日志那它就可以够理论拿来用了,所所以 beta 版。

23.    那你对 1.0 能否想法呢?
有,1.0的时分该当把搜集库的单元测试做好。因为muduo搜集库触及到 IO和多线程,IO 的单元测试会比拟费事。特别是各种出错的情况,你如何让把持系统前去你想要的差错。这个我有一些想法,也已经写了博客,但还没有时间去真实的把它做出来。现在的测试是手工完成的,不是很好。到2.0的时分会用 C++ 11,或许会使用右值引用和挪移语义提高一些内存复制方面的功用。可是目前主流的Linux发行版自带的GCC编译器版本都还没有支持 C++ 11,要等 GCC 4.6普及了以后才行。

24.    你觉得搜集游戏Server能否是你这个库比拟好的运用场景?
假设你从处理并发长连接这个方面来讲是没有问题的。可是Muduo不支持 UDP,假设你的游戏需求用 UDP 通信的话,那你需求做一些修正。此外就是搜集游戏可能会在安全性方面有所思考,比如说抵御一些搜集侵犯,可是Muduo并没有在安全方面做特别的支持,因为它思考的是公司内网的搜集状况。

25.    也就是说Muduo是为公司内网的分布式系统设计的?
可所以公司内网的全球范畴的分布式系统,但并不是为公网应用而设计的。可是你可以用一个比拟抗暴的连接Server放到公网上,然后用Muduo来完成连接Server当前的那些营业处理Task。我个人在安全性方面并没有十分多的研究,我只知道搜集侵犯的办法五花八门防不胜防,所以假设我说可以用(在公网用)的话那是在坑你。

26.    国外有十分多成功的开源项目,可是国际似乎没有,你如何看这个现象?
十分多公司用了开源项目,并且修改了,大多数是不愿意把修改回馈给上游的。比如说优化了一下功用,也许增加了一些功用我公司内部用就很好了。我觉得公司尚且如此的话,那么个人就只能仰仗兴味爱好参与了。

27.    也就是你认为国际开源做的不好是因为没有公司的推动?
也不能这么说。假设公司要用外面贡献的代码是要签协议的。比如我上次给 Google glog提一个 bug,我给他一个 diff 文件,他想用这个 diff 文件,他要我跟他签授权协议,要清楚我甘心贡献出这段代码的知识产权。因为假设没有这个协议的话,我以后可以告 Google 说你用了我一行代码。所以假设开源项目的维护是公司的话,是会有这些法则方面的问题。所以法则方面也要跟上,让公司觉得做这个任务是安全的,否则他甘心不接受外界的贡献。

28.    所以你觉得是因为国际法则方面的缺失,招致了公司感到没有包管性?
该当说是没有这个先例吧,我不晓得有哪些律师在这方面很在行。我不知道能否是可以由知识产权方面的律师来制订一个关于代码贡献的公约。只需这些都有了才华做双向的开源。否则就是单向的,我(公司)把代码放出来你们可以看,可是改只能我改。你可以提bug,可是只能我来改,我不会把你的 patch 拿出去,估计也没人提交 patch。而且在公司具有话语权的人,他不一定是搞技能的,他肯定会思考这个任务会不会影响公司笼统,也许惹上官司等等,经常这类项目都不会颠末。

29.    你能否一些建议给刚入门的次序员,协助他们发展?
次序员发展该看什么书之类的该当有十分多人讲过,我就不多费口舌了。我认为在国际这个状况下新手不要上国际论坛问问题或参与谈判,你可以去看国外论坛别人问的问题与回答。可是国际论坛充满了口水战、抬杠、灌水,就算有人回答你的问题,你如何知道回答的人是真懂,还是半瓶水闲逛,又也许是道听涂说人云亦云呢?假设新手提问的话,要么就是问题很轻易别人不情愿容许反复回答,也许糊弄你几句让你看书去;要么就是问题太复杂,没有情面愿花时间写几百字详实解答。而且新手但凡也问不出什么有新意的问题,基本上都是别人问过回答过的,多用搜索就能够处置。所以我觉得少上论坛,糜掷时间。

30.    你这个看法很配合,我第一次听到。你对2KB开源有什么见解也许建议吗?
现在功用左近的开源库十分多,2KB开源事不是能做一些实测评选,用不合的库完成相似的功用,然后在相似的运转状况中比一比功用和应用的难易度。关于搜集库而言,有一个不错的测试用例:http://blog.yufeng.info/archives/116中提到的hotwheel。

31.    我们的访谈已经严重超时了,感谢你对2KB开源的支持,下次有机遇不断会商。
好的,非常感谢,再会!


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部