* 线程安全,支持多核多线程
* 不考虑可移植性,不跨平台,只支持 Linux,不支持 Windows。
* IO multiplexing 使用 poll 和 epoll。 (poll 是为了在开发库本身时便于调试 IO 事件)
* 主要支持 x86-64,兼顾 IA32
* 不支持 UDP,只支持 TCP
* 不支持 IPv6,只支持 IPv4
* 不考虑广域网应用,只考虑局域网
* 只支持一种使用模式:non-blocking IO + one event loop per thread,不考虑阻塞 IO
* API 简单易用,只暴露具体类和标准库里的类,不使用 non-trivial templates,也不使用虚函数
* 只满足常用需求的 90%,不面面俱到,必要的时候以 app 来适应 lib
* 只做 library,不做成 framework
* 争取全部代码在 5000 行以内(不含测试)
muduo 的主体内容在 5 月底已经基本完成,现在我把它开源。
从架构上讲,muduo 没有多少新意,它就是一个 IO 多路复用的事件处理库,熟悉 reactor 模式的人一看就明白。
在实用上,我还没有用它实现复杂的应用(我有一些打算,比如实现 protobuf-rpc)。
这个库也没有以高并发高吞吐为目标,它的目标是清晰简洁,容易理解并使用,且性能过得去 (并发数达到 50k)。
在细节上,我花了比较多的精力从设计上保证事件回调的安全,不会提前释放对象,也不会有泄漏,而且做到线程安全。
更多的介绍(包括对象生命期的设定)与下载方式见: http://blog.csdn.net/Solstice/archive/2010/08/29/5848547.aspx
On Sep 1, 12:08 pm, woo <woosi...@gmail.com> wrote:
> 我觉得,你可以考虑看看libevent
> On 20:35 Tue 31 Aug , Shuo Chen wrote:
>
> > Muduo 是我在业余时间编写的基于 Reactor 模式的 C++ 网络库,适用于 Linux 平台,支持多线程。
> > 半年前我写了一篇《学之者生,用之者死----ACE历史与简评》,其中提到"我心目中理想的网络库"的样子:
On Sep 1, 11:35 am, Shuo Chen <giantc...@gmail.com> wrote:
> Muduo 是我在业余时间编写的基于 Reactor 模式的 C++ 网络库,适用于 Linux 平台,支持多线程。
> 半年前我写了一篇《学之者生,用之者死----ACE历史与简评》,其中提到"我心目中理想的网络库"的样子:
muduo 试图把 libevent 的便利性带到 C++ 语言中,并利用 C++ 语言的特性来简化网络开发(特别是资源管理这块)。
在编写 muduo 时,我尝试过用 C++ 封装 libevent ,但是感觉用起来没有自己写的库那么顺手。
On Sep 1, 2:55 pm, HaoPeiQiang <HaoPeiQi...@gmail.com> wrote:
> 我也很好奇这个
>
> 2010/9/1 jinhu wang <wangjinhu...@gmail.com>
>
>
>
>
>
> > muduo的名字是怎么来的?
>
> > 在 2010年9月1日 下午2:47,Shuo Chen <giantc...@gmail.com>写道:
>
> > 简单地说,是适应我自己的需求。正如http://code.google.com/p/muduo/所列,我的意图并不是写一个通用的网络库,而
------------------------------------------
blog: http://sunxiunan.com/
C++, Lua, living in Dalian
http://twitter.com/sagasw
------------------------------------------
2010/9/3 jigsaw <jig...@gmail.com>:
http://blog.csdn.net/Solstice/archive/2010/09/04/5863411.aspx
On Sep 1, 11:35 am, Shuo Chen <giantc...@gmail.com> wrote:
> Muduo 是我在业余时间编写的基于 Reactor 模式的 C++ 网络库,适用于 Linux 平台,支持多线程。
> 半年前我写了一篇《学之者生,用之者死----ACE历史与简评》,其中提到"我心目中理想的网络库"的样子:
On Sep 4, 4:12 pm, Hongzhang Liu <hongzhang....@gmail.com> wrote:
> 天将以夫子为木铎
>
> 野心很大啊
>
> 2010/9/1 jinhu wang <wangjinhu...@gmail.com>
>
>
>
> > muduo的名字是怎么来的?
>
> > 在 2010年9月1日 下午2:47,Shuo Chen <giantc...@gmail.com>写道:
>
> > 简单地说,是适应我自己的需求。正如http://code.google.com/p/muduo/所列,我的意图并不是写一个通用的网络库,而
http://blog.csdn.net/Solstice/archive/2010/09/05/5864889.aspx
On Sep 5, 2:45 pm, qiaojie <qiao...@gmail.com> wrote:
> 这位老兄,没做过测试就不要乱下结论,你怎么知道他的程序CPU占用率就比asio高很多了?
> 而且你的话也很矛盾,一会说"asio快到任何人都望尘莫及",一会又说"cpp速度没c快",那你告诉我asio用什么开发的?
>
> 当然我也觉得楼主的测试有些草率和不严谨,首先不应该在同一台机器上测试,本机测试的话TCP并不通过网卡,而是直接在内存里通讯了,这样不可能准确的得到IO 吞吐量,其次应该补充一下两个测试中所用的IO模型,以及对瓶颈的分析。
* 不考虑广域网应用,只考虑局域网
不是所有應用都要開一百萬個連接吧。對於局域網的分佈式應用,連接數等於局域網內的節點數目己經足夠吧?
--
Milo Yip
Twitter @miloyip
http://www.cnblogs.com/miloyip/
http://miloyip.seezone.net/
在 IO 事件处理效率方面,muduo 与 libevent2 总体比较接近,各擅胜场。在并发量特别大的情况下(大于 30k),muduo 略
微占优。
http://blog.csdn.net/Solstice/archive/2010/09/08/5869801.aspx
On Sep 16, 1:48 pm, jinhu wang <wangjinhu...@gmail.com> wrote:
> Reactor模式能理解成就是bridge模式的一个示例吧?
>
reactor 的核心功能是用一个事件循环来处理多个文件描述符上的读写事件,并且支持定时器操作。我没有看出 bridge 与这个功能有任何具体
的联系。
On Sep 16, 3:15 pm, jinhu wang <wangjinhu...@gmail.com> wrote:
> 首先:设计模式没说是OO专有的吧:)
> 其次,处理事件的通行方式一般就是委托(bridge)和继承(template)。
> 所以我说reactor只是一种泛化了的bridge模式,即便跟OO划清界限。
>
http://en.wikipedia.org/wiki/Bridge_pattern
On Sep 16, 4:01 pm, jinhu wang <wangjinhu...@gmail.com> wrote:
> Abstraction是什么东西?
>
没必要僵化一些概念,我也是在07年的时候看到OSE architecture user's guide的design patterns这一章节后才跳离被那经典的束缚的。虽然reactor出自另一本书,但是你不得不承认它是处理并发的一个典型的设计模式。当看到一大堆handler的时候,很容易联想到它:)
你说的另外两个模式在 reactor 里有哪些具体体现?
比如 handler 里有没有 successor?
又比如 reactor 里谁是 Mediator?谁是 ConcreteMediator?又有哪些 Colleague classes?
On Sep 16, 4:59 pm, jinhu wang <wangjinhu...@gmail.com> wrote:
> 宏观角度看,Reactor还是自成一体了,
> 从行为角度看它是:观察者、职责链、中介者的组合体;
> 从结构角度看:不说桥接了,总之是将实现体引出去的影子,呵呵。
>
我将会写一系列文章,介绍用 muduo 网络库完成常见的 TCP
网络编程任务。这些例子都比较简单,逻辑不复杂,代码也很短,适合摘取关键部分放到博客上。其中一些有一定的代表性与针对性,比如“如何传输完整的文件”估计是网络编程的初学者经常遇到的问题。
http://blog.csdn.net/Solstice/archive/2011/02/02/6171831.aspx
> From: Shuo Chen <giantc...@gmail.com>
> Date: Sep 8 2010, 1:12 am
> Subject: 发布一个基于 Reactor 模式的 C++ 网络库
> To: TopLanguage
>
>
> 击鼓传花:对比 muduo 与 libevent2 的事件处理效率
>
> 在 IO 事件处理效率方面,muduo 与 libevent2 总体比较接近,各擅胜场。在并发量特别大的情况下(大于 30k),muduo
> 略
> 微占优。
>
> http://blog.csdn.net/Solstice/archive/2010/09/08/5869801.aspx
>
> On Sep 5, 6:58 pm, Shuo Chen <giantc...@gmail.com> wrote:
>
>> 继续测试,ping pong 测试表明,muduo 吞吐量比 libevent2 高 18% 以上。
>
>>http://blog.csdn.net/Solstice/archive/2010/09/05/5864889.aspx
>
>> On Sep 4, 4:35 pm, Shuo Chen <giantc...@gmail.com> wrote:
>
>> > 出乎我的意料,ping pong 测试表明,muduo 吞吐量比 boost.asio 高 15% 以上。
>
>> >http://blog.csdn.net/Solstice/archive/2010/09/04/5863411.aspx
>
>> > On Sep 1, 11:35 am, Shuo Chen <giantc...@gmail.com> wrote:
>
>> > > Muduo 是我在业余时间编写的基于Reactor模式的 C++ 网络库,适用于 Linux 平台,支持多线程。
这是《Muduo 网络编程示例》系列的第一篇文章。本文将介绍五个简单 TCP 网络服务协议的 muduo 实现,包括 echo、
discard、chargen、daytime、time 等,以及 time 协议的客户端。以上五个协议使用不同的端口,可以放到同一个进程中实
现,且不必使用多线程。
http://blog.csdn.net/Solstice/archive/2011/02/02/6171905.aspx
这是《Muduo 网络编程示例》系列的第二篇文章。 本文讲介绍一个与 Boost.Asio 的示例代码中的聊天服务器功能类似的网络服务程序,包
括客户端与服务端的 muduo 实现。这个例子的主要目的是介绍如何处理分包,并初步涉及 Muduo 的多线程功能。
http://blog.csdn.net/Solstice/archive/2011/02/04/6172391.aspx