陈硕的 Blog

吾尝终日而思矣,不如须臾之所学也。吾尝跂而望矣,不如登高之博见也。……君子生非异也,善假于物也。

2011年3月13日

C++ 工程实践(5):避免使用虚函数作为库的接口

摘要: 作为 C++ 动态库的作者,应当避免使用虚函数作为库的接口。这么做会给保持二进制兼容性带来很大麻烦,不得不增加很多不必要的 interfaces,最终重蹈 COM 的覆辙。 本文主要讨论 Linux x86 平台,会继续举 Windows/COM 作为反面教材。 阅读全文

posted @ 2011-03-13 09:07 陈硕 阅读(5860) 评论(12) 推荐(5) 编辑

2011年3月9日

C++ 工程实践(4):二进制兼容性

摘要: 陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice本文主要讨论 Linux x86/x86-64 平台,偶尔会举 Windows 作为反面教材。C/C++ 的二进制兼容性 (binary compatibility) 有多重含义,本文主要在“头文件和库文件分别升级,可执行文件是否受影响”这个意义下讨论,我称之为 library (主要是 shared library,即动态链接库)的 ABI (application binary interface)。至于编译器与操作系统的 ABI 留给下一篇谈 C++ 标准与实践的文章。什么是二进制兼容性在解释这个 阅读全文

posted @ 2011-03-09 10:55 陈硕 阅读(6784) 评论(10) 推荐(1) 编辑

2011年3月5日

C++ 工程实践(3):采用有利于版本管理的代码格式

摘要: 所谓“有利于版本管理”的代码格式,就是指在代码中合理使用换行符,对 diff 工具友好,让 diff 的结果清晰明了地表达代码的改动。 阅读全文

posted @ 2011-03-05 15:17 陈硕 阅读(3772) 评论(11) 推荐(4) 编辑

2011年2月25日

为什么 muduo 的 shutdown() 没有直接关闭 TCP 连接?

摘要: 陈硕 (giantchen_AT_gmail)Blog.csdn.net/SolsticeMuduo 全系列文章列表: http://blog.csdn.net/Solstice/category/779646.aspx今天收到一位网友来信:在 simple 中的 daytime 示例中,服务端主动关闭时调用的是如下函数序列,这不是只是关闭了连接上的写操作吗,怎么是关闭了整个连接? 1: void DaytimeServer::onConnection(const muduo::net::TcpConnectionPtr& conn) 2: { 3: if (conn->conn 阅读全文

posted @ 2011-02-25 21:30 陈硕 阅读(2580) 评论(1) 推荐(1) 编辑

2011年2月23日

Muduo 网络编程示例之四:Twisted Finger

摘要: 陈硕 (giantchen_AT_gmail)Blog.csdn.net/Solstice这是《Muduo 网络编程示例》系列的第四篇文章。Muduo 全系列文章列表: http://blog.csdn.net/Solstice/category/779646.aspx Python Twisted 是一款非常好的网络库,它也采用 Reactor 作为网络编程的基本模型,所以从使用上与 muduo 颇有相似之处。(当然,muduo 没有 deferreds)Finger 是 twisted 文档的一个经典例子,本文展示如何用 muduo 来实现最简单的 finger 服务端。限于篇幅,只实现 阅读全文

posted @ 2011-02-23 21:34 陈硕 阅读(1251) 评论(0) 推荐(0) 编辑

2011年2月22日

C++ 工程实践(2):不要重载全局 ::operator new()

摘要: 对于现实生活中的 C++ 项目,重载 ::operator new() 几乎没有用武之地,因为很难处理好与程序所用的 C++ library 的关系。如果确实需要,我们可以从 malloc 层面入手,彻底而全面地替换内存分配器。 阅读全文

posted @ 2011-02-22 01:21 陈硕 阅读(4444) 评论(1) 推荐(3) 编辑

2011年2月15日

C++ 工程实践(1):慎用匿名 namespace

摘要: 匿名 namespace (anonymous namespace 或称 unnamed namespace) 是 C++ 的一项非常有用的功能,其主要目的是让该 namespace 中的成员(变量或函数)具有独一无二的全局名称,避免名字碰撞 (name collisions)。一般在编写 .cpp 文件时,如果需要写一些小的 helper 函数,我们常常会放到匿名 namespace 里。muduo 0.1.7 中的 muduo/base/Date.cc 和 muduo/base/Thread.cc 等处就用到了匿名 namespace。我最近在工作中遇到并重新思考了这一问题,发现匿名 na 阅读全文

posted @ 2011-02-15 22:55 陈硕 阅读(3172) 评论(0) 推荐(1) 编辑

2011年2月12日

C++ 多线程系统编程精要

摘要: 这是一套紧凑的 PPT,基本上每一张幻灯片都可以单独写一篇博客,但是我没有那么多时间一一展开论述,只能把结论和主要论据列了出来。 阅读全文

posted @ 2011-02-12 18:51 陈硕 阅读(5552) 评论(4) 推荐(2) 编辑

2011年2月6日

Muduo 网络编程示例之三:定时器

摘要: 本文介绍在非阻塞网络编程中定时器的用法与注意事项。 阅读全文

posted @ 2011-02-06 22:57 陈硕 阅读(4395) 评论(1) 推荐(2) 编辑

2011年2月4日

Muduo 网络编程示例之二:Boost.Asio 的聊天服务器

摘要: 这是《Muduo 网络编程示例》系列的第二篇文章。 本文讲介绍一个与 Boost.Asio 的示例代码中的聊天服务器功能类似的网络服务程序,包括客户端与服务端的 muduo 实现。这个例子的主要目的是介绍如何处理 TCP 分包,并初步涉及 Muduo 的多线程功能。 阅读全文

posted @ 2011-02-04 08:58 陈硕 阅读(5176) 评论(0) 推荐(2) 编辑

2011年2月2日

Muduo 网络编程示例之一:五个简单 TCP 协议

摘要: 这是《Muduo 网络编程示例》系列的第一篇文章。本文将介绍五个简单 TCP 网络服务协议的 muduo 实现,包括 echo、discard、chargen、daytime、time,以及 time 协议的客户端。以上五个协议使用不同的端口,可以放到同一个进程中实现,且不必使用多线程。 阅读全文

posted @ 2011-02-02 12:59 陈硕 阅读(5366) 评论(3) 推荐(0) 编辑

Muduo 网络编程示例之零:前言

摘要: 我将会写一系列文章,介绍用 muduo 网络库完成常见的 TCP 网络编程任务。这些例子都比较简单,逻辑不复杂,代码也很短,适合摘取关键部分放到博客上。其中一些有一定的代表性与针对性,比如“如何传输完整的文件”估计是网络编程的初学者经常遇到的问题。 阅读全文

posted @ 2011-02-02 01:15 陈硕 阅读(3670) 评论(0) 推荐(0) 编辑

2010年10月19日

分布式系统的工程化开发方法

摘要: 以下是我在珠三角技术沙龙 2010Q4 上的演讲投影片。 阅读全文

posted @ 2010-10-19 01:38 陈硕 阅读(19726) 评论(9) 推荐(10) 编辑

2010年9月29日

并发编程的 15 条建议(译)

摘要: 内核专家 Bryan Cantrill 和 Jeff Bonwick 在 2008 年 9 月的《ACM Queue》上发表了《Real-world Concurrency》 一文,提出了 15 条并发编程的建议。 阅读全文

posted @ 2010-09-29 23:57 陈硕 阅读(6114) 评论(16) 推荐(7) 编辑

2010年9月8日

击鼓传花:对比 muduo 与 libevent2 的事件处理效率

摘要: 这回我们用 libevent2 自带的性能测试程序(击鼓传花)来对比 muduo 和 libevent2 在高并发情况下的 IO 事件处理效率。结论:muduo 与 libevent2 总体比较接近,各擅胜场。在并发量特别大的情况下(大于 10k),muduo 略微占优。 阅读全文

posted @ 2010-09-08 01:12 陈硕 阅读(3913) 评论(3) 推荐(2) 编辑

2010年9月5日

muduo 与 libevent2 吞吐量对比

摘要: 本文用单机 ping pong 测试来对比 muduo 和 libevent2 的吞吐量,测试结果表明 muduo 吞吐量平均比 libevent2 高 18% 以上,个别情况达到 70%。 阅读全文

posted @ 2010-09-05 19:14 陈硕 阅读(3252) 评论(2) 推荐(0) 编辑

2010年9月4日

muduo 与 boost asio 吞吐量对比

摘要: muduo 是一个基于 Reactor 模式的 C++ 网络库,我在编写它的时候并没有以高并发高吞吐为主要目标,但出乎我的意料,ping pong 测试表明,muduo 吞吐量比 boost.asio 高 15% 以上。 阅读全文

posted @ 2010-09-04 16:29 陈硕 阅读(6259) 评论(5) 推荐(5) 编辑

2010年8月29日

发布一个基于 Reactor 模式的 C++ 网络库

摘要: Muduo 是我在业余时间编写的基于 Reactor 模式的 C++ 网络库,适用于 Linux 平台,支持多线程。本文主要介绍 muduo 网络库的使用。其设计与实现将有另文讲解。 阅读全文

posted @ 2010-08-29 23:44 陈硕 阅读(8719) 评论(17) 推荐(10) 编辑

2010年8月21日

发布一个 Linux 下的 C++ 多线程库

摘要: 发布一个我自己业余时间编写的 C++ 多线程库 for Linux,这个库只有不到 1000 行源代码,封装了 pthreads 的常用功能(互斥器、条件变量、线程),实现了简单的线程池,并仿照 java concurrent 包编写了 BlockingQueue 和 CountDownLatch。库里的每个 class 都提供了使用样例。 阅读全文

posted @ 2010-08-21 23:49 陈硕 阅读(4466) 评论(6) 推荐(3) 编辑

2010年8月15日

《程序中的日期与时间》第一章 日期计算

摘要: 本文详细说明了以 Julian Day Number 为基础的日期处理的算法,解释了每个公式的意义,并用 C++ 语言实现了一个 Date class。 阅读全文

posted @ 2010-08-15 23:22 陈硕 阅读(2568) 评论(7) 推荐(7) 编辑

2010年5月9日

计算机图书赠送

摘要: 最近清理出一批暂时用不上的计算机技术图书,准备送给需要它们的人 阅读全文

posted @ 2010-05-09 09:58 陈硕 阅读(5981) 评论(40) 推荐(11) 编辑

2010年4月6日

对 C++ 历史的个人观点

摘要: 回顾了 C++ 发展的三大约束,还有谎言与真相。 阅读全文

posted @ 2010-04-06 20:41 陈硕 阅读(4216) 评论(9) 推荐(5) 编辑

2010年3月10日

学之者生,用之者死——ACE历史与简评

摘要: ACE 是现代面向对象网络编程的鼻祖,确立了许多重要模式,如 Reactor、Acceptor 等,重要到我们甚至觉得网络编程就应该是那样的。但为什么 ACE 叫好不叫座?大名鼎鼎却使用者寥寥?本文谈谈从其诞生背景、代码质量等方面谈谈我的个人观点。 阅读全文

posted @ 2010-03-10 11:11 陈硕 阅读(13109) 评论(20) 推荐(8) 编辑

2010年3月3日

《多线程服务器的适用场合》例释与答疑

摘要: 这篇文章用一些实例(memcached,MySQL,PgSQL,http proxy)来解答读者关于《多线程服务器的适用场合》的疑问,包括“多线程程序如何让 IO 和“计算”相互重叠,降低 latency?”、“为什么第三方库往往要用自己的线程?”等等 阅读全文

posted @ 2010-03-03 19:58 陈硕 阅读(3505) 评论(4) 推荐(6) 编辑

2010年2月28日

多线程服务器的适用场合

摘要: 多线程的适用场景是:提高响应速度,让 IO 和“计算”相互重叠,降低 latency。 虽然多线程不能提高绝对性能,但能提高平均响应性能。 在多核时代,多线程编程是不可避免的,“鸵鸟算法”不是办法。 阅读全文

posted @ 2010-02-28 21:32 陈硕 阅读(7982) 评论(5) 推荐(8) 编辑

导航