自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(145)
  • 收藏
  • 关注

高性能网络编程7--tcp连接的内存使用

当服务器的并发TCP连接数以十万计时,我们就会对一个TCP连接在操作系统内核上消耗的内存多少感兴趣。socket编程方法提供了SO_SNDBUF、SO_RCVBUF这样的接口来设置连接的读写缓存,linux上还提供了以下系统级的配置来整体设置服务器上的TCP内存使用,但这些配置看名字却有些互相冲突、概念模糊的感觉,如下(sysctl -a命令可以查看这些配置):net.ipv4.tcp_rm...

2014-01-23 17:47:00 963

高性能网络编程6--reactor反应堆与定时器管理

反应堆开发模型被绝大多数高性能服务器所选择,上一篇所介绍的IO多路复用是它的实现基础。定时触发功能通常是服务器必备组件,反应堆模型往往还不得不将定时器的管理囊括在内。本篇将介绍反应堆模型的特点和用法。首先我们要谈谈,网络编程界为什么需要反应堆?有了IO复用,有了epoll,我们已经可以使服务器并发几十万连接的同时,维持高TPS了,难道这还不够吗?我的答案是,技术层面足够了,但在软件工程层面却...

2013-12-20 19:37:00 528

《深入理解Nginx》第2版修订前读者意见征求帖

最近编辑lisa和我讨论《深入理解Nginx》这本书第2版的出版事宜,我想还是以读者的需求为主,请读者朋友们在这里回复你们觉得:有哪些第1版书中内容有些啰嗦,可以精简的?有哪些内容说得不够详尽,需要增加篇幅的?有哪些Nginx的新变化,在第1版中没有相关内容的出现,需要在第2版中涉及的?有哪些章节的顺序不太合理,有些应该放在前面更容易理解?或者其他意见,尽请提出。顺带拉下票,csdn...

2013-12-16 11:56:00 207

高性能网络编程5--IO复用与并发编程

对于服务器的并发处理能力,我们需要的是:每一毫秒服务器都能及时处理这一毫秒内收到的数百个不同TCP连接上的报文,与此同时,可能服务器上还有数以十万计的最近几秒没有收发任何报文的相对不活跃连接。同时处理多个并行发生事件的连接,简称为并发;同时处理万计、十万计的连接,则是高并发。服务器的并发编程所追求的就是处理的并发连接数目无限大,同时维持着高效率使用CPU等资源,直至物理资源首先耗尽。并发编程...

2013-12-04 15:57:00 622

高性能网络编程4--TCP连接的关闭

TCP连接的关闭有两个方法close和shutdown,这篇文章将尽量精简的说明它们分别做了些什么。为方便阅读,我们可以带着以下5个问题来阅读本文:1、当socket被多进程或者多线程共享时,关闭连接时有何区别?2、关连接时,若连接上有来自对端的还未处理的消息,会怎么处理?3、关连接时,若连接上有本进程待发送却未来得及发送出的消息,又会怎么处理?4、so_linger这个功能的用处在哪?...

2013-10-26 12:24:00 1734

高性能网络编程3----TCP消息的接收

这篇文章将试图说明应用程序如何接收网络上发送过来的TCP消息流,由于篇幅所限,暂时忽略ACK报文的回复和接收窗口的滑动。为了快速掌握本文所要表达的思想,我们可以带着以下问题阅读:1、应用程序调用read、recv等方法时,socket套接字可以设置为阻塞或者非阻塞,这两种方式是如何工作的?2、若socket为默认的阻塞套接字,此时recv方法传入的len参数,是表示必须超时(SO_RCVTI...

2013-08-26 18:55:00 307 1

高性能网络编程2----TCP消息的发送

在上一篇中,我们已经建立好的TCP连接,对应着操作系统分配的1个套接字。操作TCP协议发送数据时,面对的是数据流。通常调用诸如send或者write方法来发送数据到另一台主机,那么,调用这样的方法时,在操作系统内核中发生了什么事情呢?我们带着以下3个问题来细细分析:发送方法成功返回时,能保证TCP另一端的主机接收到吗?能保证数据已经发送到网络上了吗?套接字为阻塞或者非阻塞时,发送方法做的事情有何不...

2013-07-18 16:37:00 247

一个低级Illegal instruction错误的定位--忽略编译期警告就得加倍偿还

这个问题是我在开发心跳服务器时的一个笔误,其实错误非常的低级浅显,特别写篇文章是想告诉大家,编译期的警告是非常重要的!由于项目代码量大,编译期信息很多,我在忙于联调时就悲催的忽视了一条编译期警告信息,实际上这个警告解决问题实在是方便,我忽略了它直接从core上啃哧啃哧定位问题花的时间比之多了去了。这篇文章的目的就是以这个很天真又很容易犯的笔误错误,来提醒大家:请不要忽略任何编译期的警告,磨刀不...

2013-06-25 17:19:00 211

高性能网络编程(一)----accept建立连接

最近在部门内做了个高性能网络编程的培训,近日整理了下PPT,欲写成一系列文章从应用角度谈谈它。编写服务器时,许多程序员习惯于使用高层次的组件、中间件(例如OO(面向对象)层层封装过的开源组件),相比于服务器的运行效率而言,他们更关注程序开发的效率,追求更快的完成项目功能点、希望应用代码完全不关心通讯细节。他们更喜欢在OO世界里,去实现某个接口、实现这个组件预定义的各种模式、设置组件参数来达...

2013-06-24 19:02:00 223

推荐我的新书《深入理解Nginx:模块开发与架构解析》

http://www.china-pub.com/STATIC/zt_mb/zt_huodong_2013_3.asp?filename=2013_jsj_nginx_20130401目录《深入理解nginx:模块开发与架构解析》前 言第一部分 nginx能帮我们做什么第1章 研究nginx前的准备工作 / 21.1 nginx是什么 / 21.2 为什么选择n...

2013-04-09 09:23:00 652

推荐我的新书《深入理解Nginx:模块开发与架构解析》

http://www.china-pub.com/STATIC/zt_mb/zt_huodong_2013_3.asp?filename=2013_jsj_nginx_20130401目录《深入理解nginx:模块开发与架构解析》前 言第一部分 nginx能帮我们做什么第1章 研究nginx前的准备工作 / 21.1 nginx是什么 / 21.2 为什么选择n...

2013-04-09 09:23:00 94

坑爹的list容器size方法--为了splice居然把复杂度设计为O(N)?

最近在做一个性能要求较高的项目,有个服务器需要处理每秒2万个udp包,每个包内有40个元素(当然这是高峰期)。服务器需要一个链表,算法中有个逻辑要把每个元素添加到链表末尾(只是这个元素对象的指针,不存在对象复制的问题),再从链表中把这些元素取出(另一个时间点)。就是一个单线程在做这件事。既然逻辑这么简单,我自然选用了C++的标准STL容器List(Linux GNU,sgi的实现),想来如...

2013-02-05 17:27:00 389

坑爹的list容器size方法--为了splice居然把复杂度设计为O(N)?

最近在做一个性能要求较高的项目,有个服务器需要处理每秒2万个udp包,每个包内有40个元素(当然这是高峰期)。服务器需要一个链表,算法中有个逻辑要把每个元素添加到链表末尾(只是这个元素对象的指针,不存在对象复制的问题),再从链表中把这些元素取出(另一个时间点)。就是一个单线程在做这件事。既然逻辑这么简单,我自然选用了C++的标准STL容器List(Linux GNU,sgi的实现),想来如...

2013-02-05 17:27:00 107

两种战争

有一种国家,越打仗越有钱,例如英国,曾经的日不落帝国,又比如美国以色列等等。还有一种国家,特别是中世纪以前的国家,越打仗越穷,例如大家熟悉的汉武帝,打完匈奴国力大损。为什么会有这两种截然相反的现象呢?因为利益诉求不明确,但最大原因是利益分配不公!打仗,必然是为了利益,要么是防止别人抢自己的利益,无论是土地还是财富,要么是抢原本不是自己的利益,这是事实。打仗的主体是国家的全体人民...

2012-09-13 19:11:00 124

两种战争

有一种国家,越打仗越有钱,例如英国,曾经的日不落帝国,又比如美国以色列等等。还有一种国家,特别是中世纪以前的国家,越打仗越穷,例如大家熟悉的汉武帝,打完匈奴国力大损。为什么会有这两种截然相反的现象呢?因为利益诉求不明确,但最大原因是利益分配不公!打仗,必然是为了利益,要么是防止别人抢自己的利益,无论是土地还是财富,要么是抢原本不是自己的利益,这是事实。打仗的主体是国家的全体人民...

2012-09-13 19:11:00 162

深入mongoDB(1)--mongod的线程模型与网络框架

最近工作需要开始研究mongoDB,我准备从其源代码角度,对于mongod和mongos服务的架构、sharding策略、replicaset策略、数据同步容灾、索引等机制做一个本质性的了解。其代码约20万行(我研究的是2.0.6版本源码),本篇先从mongod的启动流程说起,它本是一个多线程程序,所以本文在于说明mongod有多少个线程,每个线程的意义所在。希望大家阅读本文时关注在mongod的...

2012-07-24 20:27:00 198

深入mongoDB(1)--mongod的线程模型与网络框架

最近工作需要开始研究mongoDB,我准备从其源代码角度,对于mongod和mongos服务的架构、sharding策略、replicaset策略、数据同步容灾、索引等机制做一个本质性的了解。其代码约20万行(我研究的是2.0.6版本源码),本篇先从mongod的启动流程说起,它本是一个多线程程序,所以本文在于说明mongod有多少个线程,每个线程的意义所在。希望大家阅读本文时关注在mongod的...

2012-07-24 20:27:00 113

原创 用google mock模拟C++对象

google mock是用来配合google test对C++项目做单元测试的。它依赖于googletest(参见我上篇文章《如何用googletest写单元测试》: http://blog.csdn.net/russell_tao/article/details/7333226),下面我来说说linux上怎么用它来做单元测试。本文包括:1、如何获取、编译google mock;2、如何...

2012-03-19 17:24:20 113

用google mock模拟C++对象

google mock是用来配合google test对C++项目做单元测试的。它依赖于googletest(参见我上篇文章《如何用googletest写单元测试》:http://blog.csdn.net/russell_tao/article/details/7333226),下面我来说说linux上怎么用它来做单元测试。本文包括:1、如何获取、编译google mock;2、如何使用gm...

2012-03-19 17:17:00 129

用google mock模拟C++对象

google mock是用来配合google test对C++项目做单元测试的。它依赖于googletest(参见我上篇文章《如何用googletest写单元测试》:http://blog.csdn.net/russell_tao/article/details/7333226),下面我来说说linux上怎么用它来做单元测试。本文包括:1、如何获取、编译google mock;2、如何使用gm...

2012-03-19 17:17:00 126

原创 如何用googletest写单元测试

googletest是一个用来写C++单元测试的框架,它是跨平台的,可应用在windows、linux、Mac等OS平台上。下面,我来说明如何使用最新的1.6版本gtest写自己的单元测试。本文包括以下几部分:1、获取并编译googletest(以下简称为gtest);2、如何编写单元测试用例;3、如何执行单元测试。4、google test内部是如何执行我们的单元测试用例的。1...

2012-03-12 11:09:04 163

如何用googletest写单元测试

googletest是一个用来写C++单元测试的框架,它是跨平台的,可应用在windows、linux、Mac等OS平台上。下面,我来说明如何使用最新的1.6版本gtest写自己的单元测试。本文包括以下几部分:1、获取并编译googletest(以下简称为gtest);2、如何编写单元测试用例;3、如何执行单元测试。4、google test内部是如何执行我们的单元测试用例的。1. 获...

2012-03-12 10:55:00 77

如何用googletest写单元测试

googletest是一个用来写C++单元测试的框架,它是跨平台的,可应用在windows、linux、Mac等OS平台上。下面,我来说明如何使用最新的1.6版本gtest写自己的单元测试。本文包括以下几部分:1、获取并编译googletest(以下简称为gtest);2、如何编写单元测试用例;3、如何执行单元测试。4、google test内部是如何执行我们的单元测试用例的。1. 获...

2012-03-12 10:55:00 86

详解rsync算法--如何减少同步文件时的网络传输量

先看下图中的场景,客户端A和B,以及服务器server都保存了同一个文件,最初,A、B和server上的文件内容都是相同的(记为File.1)。某一时刻,B修改了文件内容,上传到SERVER上(记为File.2)。客户端A这时试图向服务器SERVER更新文件到最新内容,也就是File.1更新为File.2。上面这个场景很常见,例如现在流行的网盘。假设我有一个文件a.txt在网盘上,上...

2012-02-28 17:16:17 114

详解rsync算法--如何减少同步文件时的网络传输量

先看下图中的场景,客户端A和B,以及服务器server都保存了同一个文件,最初,A、B和server上的文件内容都是相同的(记为File.1)。某一时刻,B修改了文件内容,上传到SERVER上(记为File.2)。客户端A这时试图向服务器SERVER更新文件到最新内容,也就是File.1更新为File.2。上面这个场景很常见,例如现在流行的网盘。假设我有一个文件a.txt在网盘上,上班时在...

2012-02-28 17:02:00 66

详解rsync算法--如何减少同步文件时的网络传输量

先看下图中的场景,客户端A和B,以及服务器server都保存了同一个文件,最初,A、B和server上的文件内容都是相同的(记为File.1)。某一时刻,B修改了文件内容,上传到SERVER上(记为File.2)。客户端A这时试图向服务器SERVER更新文件到最新内容,也就是File.1更新为File.2。上面这个场景很常见,例如现在流行的网盘。假设我有一个文件a.txt在网盘上,上班时在...

2012-02-28 17:02:00 76

paxos算法如何容错的--讲述五虎将的实践

(本文包括章节:1、由来,2、算法简单回顾,3、演习道具,4、演习,5、算法提出者Leslie的八卦。文字较多,图仅一幅,大家随意跳跃观看。)1、由来:刘备接受了诸葛亮的提议,决定将paxos算法的思想应用到蜀帝国的决策机制上。然而,玄德生性谨慎,决定先行试点,实践下可行性。孔明提议,由蜀国五大肌肉男:关羽、张飞、赵云、马超、黄忠,做为决策者,而廖化、周仓、魏延分别无序的提出关于同一件事的...

2012-02-22 19:33:00 246

paxos算法如何容错的--讲述五虎将的实践

(本文包括章节:1、由来,2、算法简单回顾,3、演习道具,4、演习,5、算法提出者Leslie的八卦。hoho)1、由来:刘备接受了诸葛亮的提议,决定将paxos算法的思想应用到蜀帝国的决策机制上。然而,玄德生性谨慎,决定先行试点,实践下可行性。孔明提议,由蜀国五大肌肉男:关羽、张飞、赵云、马超、黄忠,做为决策者,而廖化、周仓、魏延分别无序的提出关于同一件事的水火不容的三个提案,孔明坚信:...

2012-02-22 19:33:00 109

paxos算法如何容错的--讲述五虎将的实践

(本文包括章节:1、由来,2、算法简单回顾,3、演习道具,4、演习,5、算法提出者Leslie的八卦。hoho)1、由来:刘备接受了诸葛亮的提议,决定将paxos算法的思想应用到蜀帝国的决策机制上。然而,玄德生性谨慎,决定先行试点,实践下可行性。孔明提议,由蜀国五大肌肉男:关羽、张飞、赵云、马超、黄忠,做为决策者,而廖化、周仓、魏延分别无序的提出关于同一件事的水火不容的三个提案,孔明坚信:...

2012-02-22 19:33:00 81

谈谈哲学和人性

哲学是什么?学校里的哲学定义我不认同。哲学不是一种知识,是无法“学”到的,大学里的哲学专业和哲学课,只是去研究别人的某些抽象总结出的哲学观点,更象考古学,而我的理解不同:哲学一定是针对自己的,仅可以从别人那里了解一些观点事例,它们可能会较深程度的融入自己的思想中,形成自己的新的哲学思想。­我的观点,哲学就是自己人生中所有阅历经验思想的总和。总和又是什么?总和包括...

2012-02-20 09:58:00 188

谈谈哲学和人性

哲学是什么?学校里的哲学定义我不认同。哲学不是一种知识,是无法“学”到的,大学里的哲学专业和哲学课,只是去研究别人的某些抽象总结出的哲学观点,更象考古学,而我的理解不同:哲学一定是针对自己的,仅可以从别人那里了解一些观点事例,它们可能会较深程度的融入自己的思想中,形成自己的新的哲学思想。­我的观点,哲学就是自己人生中所有阅历经验思想的总和。总和又是什么?总和包括...

2012-02-20 09:58:00 65

谈谈哲学和人性

哲学是什么?学校里的哲学定义我不认同。哲学不是一种知识,是无法“学”到的,大学里的哲学专业和哲学课,只是去研究别人的某些抽象总结出的哲学观点,更象考古学,而我的理解不同:哲学一定是针对自己的,仅可以从别人那里了解一些观点事例,它们可能会较深程度的融入自己的思想中,形成自己的新的哲学思想。­我的观点,哲学就是自己人生中所有阅历经验思想的总和。总和又是什么?总和包括...

2012-02-20 09:58:00 120

paxos分布式一致性算法--论诸葛亮的反穿越

一日,诸葛亮找到刘备,突然献上一曲《独角戏》,而后放声大哭。刘备正沉醉于新曲,暗叹孔明大才,竟作得如此不凡仙乐,看到孔明忽而大悲,慌问:“水,何事悲恸?”诸葛亮止住抽泣:“亮自主公三顾茅庐出山以来,蒙主公厚爱,自比如鱼得水,敢不尽力?然每日击鼓升帐,皆亮一人在上唱独角戏,众将在下唯唯诺诺,只是照亮的安排做事。如此下去,亮日后定会被司马懿那厮累死呀。”刘备眨着充满问号的大眼睛:“孔明可是说曹...

2012-02-14 11:15:00 233

paxos分布式一致性算法--讲述诸葛亮的反穿越

0、引子一日,诸葛亮找到刘备,突然献上一曲《独角戏》,而后放声大哭。刘备正沉醉于新曲,暗叹孔明大才,竟作得如此不凡仙乐,看到孔明忽而大悲,慌问:“水,何事悲恸?”诸葛亮止住抽泣:“亮自主公三顾茅庐出山以来,蒙主公厚爱,自比如鱼得水,敢不尽力?然每日击鼓升帐,皆亮一人在上唱独角戏,众将在下唯唯诺诺,只是照亮的安排做事。如此下去,亮日后定会被司马懿那厮累死呀。”刘备眨着充满问号的大眼睛:“...

2012-02-14 11:15:00 65

paxos分布式一致性算法--讲述诸葛亮的反穿越

0、引子一日,诸葛亮找到刘备,突然献上一曲《独角戏》,而后放声大哭。刘备正沉醉于新曲,暗叹孔明大才,竟作得如此不凡仙乐,看到孔明忽而大悲,慌问:“水,何事悲恸?”诸葛亮止住抽泣:“亮自主公三顾茅庐出山以来,蒙主公厚爱,自比如鱼得水,敢不尽力?然每日击鼓升帐,皆亮一人在上唱独角戏,众将在下唯唯诺诺,只是照亮的安排做事。如此下去,亮日后定会被司马懿那厮累死呀。”刘备眨着充满问号的大眼睛:“...

2012-02-14 11:15:00 69

从TCP协议的原理来谈谈rst复位攻击

在谈RST攻击前,必须先了解TCP:如何通过三次握手建立TCP连接、四次握手怎样把全双工的连接关闭掉、滑动窗口是怎么传输数据的、TCP的flag标志位里RST在哪些情况下出现。下面我会画一些尽量简化的图来表达清楚上述几点,之后再了解下RST攻击是怎么回事。 1、TCP是什么?TCP是在IP网络层之上的传输层协议,用于提供port到port面向连接的可靠的字节流传输。我来用土语解释下上面...

2012-02-06 13:54:00 4570

从TCP协议的原理来谈谈rst复位攻击

在谈RST攻击前,必须先了解TCP:如何通过三次握手建立TCP连接、四次握手怎样把全双工的连接关闭掉、滑动窗口是怎么传输数据的、TCP的flag标志位里RST在哪些情况下出现。下面我会画一些尽量简化的图来表达清楚上述几点,之后再了解下RST攻击是怎么回事。1、TCP是什么?TCP是在IP网络层之上的传输层协议,用于提供port到port面向连接的可靠的字节流传输。我来用土语解释下上面的...

2012-02-06 13:54:00 116

从TCP协议的原理来谈谈rst复位攻击

在谈RST攻击前,必须先了解TCP:如何通过三次握手建立TCP连接、四次握手怎样把全双工的连接关闭掉、滑动窗口是怎么传输数据的、TCP的flag标志位里RST在哪些情况下出现。下面我会画一些尽量简化的图来表达清楚上述几点,之后再了解下RST攻击是怎么回事。1、TCP是什么?TCP是在IP网络层之上的传输层协议,用于提供port到port面向连接的可靠的字节流传输。我来用土语解释下上面的...

2012-02-06 13:54:00 122

设计模式在C语言中的应用--读nginx源码

市面上的“设计模式“书籍文章,皆针对Java/C++/C#等面向对象语言,似乎离开了面向对象的种种特性,设计模式就无法实现,没有用武之地了。 是这样吗?设计模式的概念是从建筑领域引入的,本身从没歧视过面向过程编程语言,它只是对一类问题的普遍解决方案而已。面向对象语言因为有类、多态等特点,使得开发者们容易达到:隐藏细节、封装变化,而这与设计模式的目的比较一致,所以大师们爱把设计模式与面向对象...

2012-02-01 17:20:00 277

设计模式在C语言中的应用--读nginx源码

市面上的“设计模式“书籍文章,皆针对Java/C++/C#等面向对象语言,似乎离开了面向对象的种种特性,设计模式就无法实现,没有用武之地了。是这样吗?设计模式的概念是从建筑领域引入的,本身从没歧视过面向过程编程语言,它只是对一类问题的普遍解决方案而已。面向对象语言因为有类、多态等特点,使得开发者们容易达到:隐藏细节、封装变化,而这与设计模式的目的比较一致,所以大师们爱把设计模式与面向对象语...

2012-02-01 17:20:00 57

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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