陈硕的Blog

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

《Linux 多线程服务端编程:使用 muduo C++ 网络库》网上书店订购

《Linux 多线程服务端编程:使用 muduo C++ 网络库》网上书店订购内容简介本书主要讲述采用现代 C++ 在 x86-64 Linux 上编写多线程 TCP 网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即 one loop per thread。这是在 L...

2013-01-11 12:43:50

阅读数:54568

评论数:193

近期微博吐槽言论存档,涉及“性能优化”、C++陋习等

写C++程序的几个陋习:class 名以大写 C 开头,例如 CDate;成员变量以 m_ 开头;变量采用匈牙利命名法;不知道何时禁用 copy-ctor/assign operator。有些人常常把“性能”挂在嘴边,而且其以“提高性能”为理由的“优化措施”往往不到点子上,只增加了复杂性和维护难度...

2013-08-12 13:57:21

阅读数:35906

评论数:16

为什么多线程读写 shared_ptr 要加锁?

为什么多线程读写 shared_ptr 要加锁?陈硕(giantchen_AT_gmail_DOT_com)2012-01-28最新版下载:http://chenshuo.googlecode.com/files/CppEngineering.pdf我在《Linux 多线程服务端编程:使用 mud...

2013-01-28 05:13:55

阅读数:68380

评论数:55

关于 std::set/std::map 的几个为什么

陈硕 (chenshuo.com)2013-01-20std::set/std::map (以下用 std::map 代表) 是常用的关联式容器,也是 ADT(抽象数据类型)。也就是说,其接口(不是 OO 意义下的 interface)不仅规定了操作的功能,还规定了操作的复杂度(代价/cost)。...

2013-01-20 13:22:53

阅读数:52930

评论数:10

新书预告:《Linux 多线程服务端编程:使用 muduo C++ 网络库》

看完了 W. Richard Stevens 的传世经典《UNIX 网络编程》, 能照着例子用 Sockets API 编写 echo 服务, 却仍然对稍微复杂一点的网络编程任务感到无从下手? 书中示例代码把业务逻辑和 Sockets 调用混在一起,似乎不利于将来扩展?网络编程中的遇到一些具体问题...

2012-09-21 07:11:15

阅读数:44441

评论数:17

从《C++ Primer 第四版》入手学习 C++

《C++ Primer 第4版 评注版》即将出版,这是序言。PDF 版见:https://github.com/downloads/chenshuo/documents/LearnCpp.pdf从《C++ Primer 第四版》入手学习 C++为什么要学习C++?2009 年本书作者 Stan L...

2012-07-06 08:54:20

阅读数:74717

评论数:12

发布适合服务端C++程序的高效日志库

PPT 见http://www.slideshare.net/chenshuo/efficient-logging-in-multithreaded-c-server/2012年6月30日在深圳的简短演讲:http://v.youku.com/v_show/id_XNDIyMjUwMDYw.htm...

2012-06-06 21:20:25

阅读数:33010

评论数:10

C++ 工程实践(12):C++ 编译链接模型精要

《C++ 工程实践》新增第15节“C++ 编译链接模型精要”  PDF 下载: https://github.com/downloads/chenshuo/documents/CppPractice.pdf

2012-04-20 08:18:46

阅读数:19671

评论数:4

C++ 工程实践(11):用 STL algorithm 秒杀几道算法面试题

《C++ 工程实践》新增第14节“用 STL algorithm 秒杀几道算法面试题” PDF 下载: https://github.com/downloads/chenshuo/documents/CppPractice.pdf

2012-04-01 10:01:26

阅读数:21978

评论数:7

C++ 工程实践(10):再探std::string

本文总结了std::string的三种常见实现方式。全文见 https://github.com/downloads/chenshuo/documents/CppPractice.pdf 第13节。

2012-03-17 16:29:55

阅读数:16129

评论数:0

C++ 工程实践(9):数据抽象

陈硕 (giantchen_AT_gmail)http://blog.csdn.net/Solstice  http://weibo.com/giantchen陈硕关于 C++ 工程实践的系列文章: http://blog.csdn.net/Solstice/category/8

2011-08-22 00:20:40

阅读数:17756

评论数:7

C++ 工程实践(8):值语义

陈硕 (giantchen_AT_gmail)http://blog.csdn.net/Solstice  http://weibo.com/giantchen陈硕关于 C++ 工程实践的系列文章: http://blog.csdn.net/Solstice/category/8

2011-08-16 21:16:23

阅读数:15322

评论数:3

C++ 工程实践(7):iostream 的用途与局限

C++ 工程实践(7):iostream 的用途与局限 陈硕 (giantchen_AT_gmail) http://blog.csdn.net/Solstice http://weibo.com/giantchen 陈硕关于 C++ 工程实践的系列文章: ht

2011-07-17 15:08:54

阅读数:30473

评论数:36

一种自动反射消息类型的 Google Protobuf 网络传输方案

这篇文章要解决的问题是:在接收到 protobuf 数据之后,如何自动创建具体的 Protobuf Message 对象,再做的反序列化。“自动”的意思是:当程序中新增一个 protobuf Message 类型时,这部分代码不需要修改,不需要自己去注册消息类型。其实,Google Protobu...

2011-04-03 15:57:00

阅读数:72642

评论数:128

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

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

2011-03-12 22:01:00

阅读数:21459

评论数:111

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

陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice 本文主要讨论 Linux x86/x86-64 平台,偶尔会举 Windows 作为反面教材。 C/C++ 的二进制兼容性 (binary compatibility) 有多重含义,本文主要在“头...

2011-03-09 10:46:00

阅读数:23175

评论数:61

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

版本管理(version controlling)是每个程序员的基本技能,C++ 程序员也不例外。版本管理的基本功能之一是追踪代码变化,让你能清楚地知道代码是如何一步步变成现在的这个样子,以及每次 check-in 都具体改动了哪些内部。所谓“有利于版本管理”的代码格式,就是指在代码中合理使用换...

2011-03-05 15:16:00

阅读数:14104

评论数:26

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

今天收到一位网友来信:在 simple 中的 daytime 示例中,服务端主动关闭时调用的是如下函数序列,这不是只是关闭了连接上的写操作吗,怎么是关闭了整个连接?陈硕答复如下: Muduo TcpConnection 没有提供 close,而只提供 shutdown ,这么做是为了收发数据的完...

2011-02-25 21:30:00

阅读数:10885

评论数:7

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

Python Twisted 是一款非常好的网络库,它也采用 Reactor 作为网络编程的基本模型,所以从使用上与 muduo 颇有相似之处。(当然,muduo 没有 deferreds)Finger 是 twisted 文档的一个经典例子,本文展示如何用 muduo 来实现最简单的 finge...

2011-02-23 21:34:00

阅读数:6714

评论数:3

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

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

2011-02-22 01:23:00

阅读数:17076

评论数:28

提示
确定要删除当前文章?
取消 删除
关闭
关闭