陈硕的 Blog

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

2011年3月5日

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

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

posted @ 2011-03-05 15:17 陈硕 阅读(3659) 评论(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 陈硕 阅读(2559) 评论(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 陈硕 阅读(1241) 评论(0) 推荐(0) 编辑

2011年2月22日

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

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

posted @ 2011-02-22 01:21 陈硕 阅读(4279) 评论(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 陈硕 阅读(3090) 评论(0) 推荐(1) 编辑

2011年2月12日

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

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

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

2011年2月6日

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

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

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

2011年2月4日

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

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

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

2011年2月2日

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

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

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

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

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

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

2010年10月19日

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

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

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

2010年9月29日

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

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

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

2010年9月8日

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

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

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

2010年9月5日

muduo 与 libevent2 吞吐量对比

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

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

2010年9月4日

muduo 与 boost asio 吞吐量对比

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

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

2010年8月29日

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

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

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

2010年8月21日

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

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

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

2010年8月15日

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

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

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

2010年5月9日

计算机图书赠送

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

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

2010年4月6日

对 C++ 历史的个人观点

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

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

2010年3月10日

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

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

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

2010年3月3日

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

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

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

2010年2月28日

多线程服务器的适用场合

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

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

2010年2月26日

Linux 新增系统调用的启示

摘要: 最近无意中注意到了 Linux 新增的几个系统调用的对编写服务器代码的影响。 1. 服务器程序的风格可能在变: 新的创建文件描述符的 syscall 一般都可以直接指定 O_NONBLOCK 和 FD_CLOEXEC,或许能反映当前 Linux (服务端)开发的风向,那就是我在前一篇博客《多线程服务器的常用编程模型》里推荐的 one loop per thread + (non-blocking IO with IO multiplexing)。 阅读全文

posted @ 2010-02-26 02:51 陈硕 阅读(6415) 评论(0) 推荐(3) 编辑

2010年2月12日

多线程服务器的常用编程模型

摘要: 本文主要讲我个人在多线程开发方面的一些粗浅经验。总结了一两种常用的线程模型,归纳了进程间通讯与线程同步的最佳实践,以期用简单规范的方式开发多线程程序。万字长文,慎入,有 PDF 版下载: http://files.cppblog.com/Solstice/multithreaded_server.pdf 阅读全文

posted @ 2010-02-12 17:00 陈硕 阅读(22349) 评论(14) 推荐(10) 编辑

导航