
Linux服务器端
文章平均质量分 77
kimg_bo
这个作者很懒,什么都没留下…
展开
-
发布一个改写自muduo的C++网络I/O库
kimgbo是一个基于Reactor模式的网络I/O库,优先考虑易用性,由muduo网络库改写而来。保留了muduo基于对象的编程风格,支持oneloop per thread + threadpool 模型。并去除了muduo对于Boost库的依赖,转而采用C++11和tr1标准替代,优化了muduo网络I/O库一处存在racecondition隐患的代码,几乎具备了muduo网原创 2016-02-05 15:42:54 · 3916 阅读 · 4 评论 -
高性能服务器架构
本文将与你分享我多年来在服务器开发方面的一些经验。对于这里所说的服务器,更精确的定义应该是每秒处理大量离散消息或者请求的服务程序,网络服务器更符合这种情况,但并非所有的网络程序都是严格意义上的服务器。使用“高性能请求处理程序”是一个很糟糕的标题,为了叙述起来简单,下面将简称为“服务器”。 本文不会涉及到多任务应用程序,在单个程序里同时处理多个任务现在已经很常见。比如你的浏览器可能就在做一转载 2016-02-15 22:25:21 · 911 阅读 · 0 评论 -
初探高性能网络I/O框架库模型(Linux)
一般的高性能网络I/O框架库包含这样几个组件:句柄(Handle)、事件多路分离器(EventDemultiplexer)、事件处理器(EventHandler)、具体事件处理器(ConcreteEventHandler)、Reactor。1、句柄 I/O框架库需要处理的对象,包括I/O事件、定时器事件、信号事件,通常称为事件源。一个事件源通常会和一个句柄绑定起来,句柄的作用是,当内核检测到某原创 2015-11-20 22:27:44 · 1559 阅读 · 1 评论 -
借助互斥量和条件变量实现读写锁
当CPU的发展不在遵循摩尔定律,并逐渐迈向多核时代的时候,为了充分发挥多核CPU的性能,多线程编程技术也应运而生。在多线程编程的过程中,线程同步机制的设计,会直接影响到程序的并发性能。Posix标准为我们提供了多种线程间的同步方式,有:互斥量、信号量、信号灯等等。每种同步机制都有其特定的属性进而决定了它们不同的适用场合,本文将介绍如何借助互斥量和信号量自己实现一个读者优先的读写锁。原创 2016-02-06 23:35:07 · 808 阅读 · 0 评论 -
Protocol Buffers动态自描述消息的用法
Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RP原创 2016-04-30 22:24:51 · 5393 阅读 · 0 评论 -
利用线程本地存储降低服务器处理延时
上一篇博客我们介绍了使用shared_ptr来提高群发聊天服务器的并发性能,然而群发服务器不仅面临并发性能瓶颈,由于用户对于实时性要求较高。群发服务器还需要具备低延时的能力,才可以处理存在大量连接时的转发。上一篇博客中展示的群发服务器,采用multip Reactor模式,消息的转发统一的在main reactor中执行,因为连接队列只有一份,所以转发的效率并不高,从第一个连接到最后一个连接存在较原创 2016-02-08 17:17:35 · 1013 阅读 · 0 评论 -
借助shared_ptr实现copy-on-write以提高多线程并发性能
锁竞争是服务器性能四大杀手之一(其他三个是:数据拷贝、环境切换、内存分配),本文将基于之前发布的kimgbo网络I/O库,以一个多线程群发聊天服务器的实现为例,介绍如何借助shared_ptr提高多线程并发的性能。多线程群发聊天服务器实现的功能是,客户端连接服务器后,可以向服务器发送消息(消息=消息头+消息体),服务器负责将消息转发给其他正处于连接状态的客户端(包括发送消息的客户端)。示意图如原创 2016-02-08 15:30:09 · 2610 阅读 · 1 评论