陈硕的 Blog

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

共3页: 上一页 1 2 3 

2011年2月22日

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

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

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

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 陈硕 阅读(1918) 评论(0) 编辑

2011年2月12日

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

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

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

2011年2月6日

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

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

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

2011年2月4日

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

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

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

2011年2月2日

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

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

posted @ 2011-02-02 12:59 陈硕 阅读(3580) 评论(3) 编辑

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

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

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

2010年10月19日

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

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

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

2010年9月29日

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

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

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

2010年9月8日

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

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

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

2010年9月5日

muduo 与 libevent2 吞吐量对比

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

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

2010年9月4日

muduo 与 boost asio 吞吐量对比

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

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

2010年8月29日

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

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

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

2010年8月21日

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

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

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

2010年8月15日

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

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

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

2010年5月9日

计算机图书赠送

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

posted @ 2010-05-09 09:58 陈硕 阅读(5420) 评论(40) 编辑

2010年4月6日

对 C++ 历史的个人观点

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

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

2010年3月10日

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

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

posted @ 2010-03-10 11:11 陈硕 阅读(11873) 评论(20) 编辑

2010年3月3日

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

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

posted @ 2010-03-03 19:58 陈硕 阅读(3115) 评论(4) 编辑

2010年2月28日

多线程服务器的适用场合

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

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

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 陈硕 阅读(5873) 评论(0) 编辑

2010年2月12日

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

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

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

2010年2月10日

当析构函数遇到多线程 ── C++ 中线程安全的对象回调

摘要: 编写线程安全的类不是难事,用同步原语保护内部状态即可。但是对象的生与死不能由对象自身拥有的互斥器来保护。如何保证即将析构对象 x 的时候,不会有另一个线程正在调用 x 的成员函数?或者说,如何保证在执行 x 的成员函数期间,对象 x 不会在另一个线程被析构?如何避免这种竞态条件是 C++ 多线程编程面临的基本问题,可以借助 boost 的 shared_ptr 和 weak_ptr 完美解决。这也是实现线程安全的 Observer 模式的必备技术。全文 1 万 2 千余字,有 PDF 版下载: http://www.cppblog.com/Files/Solstice/dtor_meets_mt.pdf阅读全文

posted @ 2010-02-10 08:22 陈硕 阅读(12310) 评论(3) 编辑

共3页: 上一页 1 2 3 

导航

统计

公告