- 博客(14)
- 收藏
- 关注
原创 Protocol Buffers动态自描述消息的用法
Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RP
2016-04-30 22:24:51 5349
原创 自己实现C语言atoi函数和线程安全版的itoa函数
C语言atoi函数是用来将字符串转化为int型整数的,itoa功能相反。下面是我自己实现的这两个函数,均为线程安全的。代码如下:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <malloc.h>#include <iostream>#include <cmath>using namespace std;//
2016-02-18 15:48:23 2468
转载 高性能服务器架构
本文将与你分享我多年来在服务器开发方面的一些经验。对于这里所说的服务器,更精确的定义应该是每秒处理大量离散消息或者请求的服务程序,网络服务器更符合这种情况,但并非所有的网络程序都是严格意义上的服务器。使用“高性能请求处理程序”是一个很糟糕的标题,为了叙述起来简单,下面将简称为“服务器”。 本文不会涉及到多任务应用程序,在单个程序里同时处理多个任务现在已经很常见。比如你的浏览器可能就在做一
2016-02-15 22:25:21 899
原创 利用线程本地存储降低服务器处理延时
上一篇博客我们介绍了使用shared_ptr来提高群发聊天服务器的并发性能,然而群发服务器不仅面临并发性能瓶颈,由于用户对于实时性要求较高。群发服务器还需要具备低延时的能力,才可以处理存在大量连接时的转发。上一篇博客中展示的群发服务器,采用multip Reactor模式,消息的转发统一的在main reactor中执行,因为连接队列只有一份,所以转发的效率并不高,从第一个连接到最后一个连接存在较
2016-02-08 17:17:35 996
原创 借助shared_ptr实现copy-on-write以提高多线程并发性能
锁竞争是服务器性能四大杀手之一(其他三个是:数据拷贝、环境切换、内存分配),本文将基于之前发布的kimgbo网络I/O库,以一个多线程群发聊天服务器的实现为例,介绍如何借助shared_ptr提高多线程并发的性能。多线程群发聊天服务器实现的功能是,客户端连接服务器后,可以向服务器发送消息(消息=消息头+消息体),服务器负责将消息转发给其他正处于连接状态的客户端(包括发送消息的客户端)。示意图如
2016-02-08 15:30:09 2573 1
原创 借助互斥量和条件变量实现读写锁
当CPU的发展不在遵循摩尔定律,并逐渐迈向多核时代的时候,为了充分发挥多核CPU的性能,多线程编程技术也应运而生。在多线程编程的过程中,线程同步机制的设计,会直接影响到程序的并发性能。Posix标准为我们提供了多种线程间的同步方式,有:互斥量、信号量、信号灯等等。每种同步机制都有其特定的属性进而决定了它们不同的适用场合,本文将介绍如何借助互斥量和信号量自己实现一个读者优先的读写锁。
2016-02-06 23:35:07 792
原创 记CentOS 7环境下安装g++
首先去CentOS 7的镜像文件中Packages目录下找到这两个安装包,libstdc++-devel-4.8.2-16.el7.x86_64.rpm、gcc-c++-4.8.2-16.el7.x86_64.rpm拷贝到虚拟机中,或者通过VMware直接导入,然后分别安装这两个安装包即可。 rpm -ivh libstdc++-devel-4.8.2-16.el7.x86_64
2016-02-06 22:28:01 6813
原创 发布一个改写自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 3874 4
原创 初探高性能网络I/O框架库模型(Linux)
一般的高性能网络I/O框架库包含这样几个组件:句柄(Handle)、事件多路分离器(EventDemultiplexer)、事件处理器(EventHandler)、具体事件处理器(ConcreteEventHandler)、Reactor。1、句柄 I/O框架库需要处理的对象,包括I/O事件、定时器事件、信号事件,通常称为事件源。一个事件源通常会和一个句柄绑定起来,句柄的作用是,当内核检测到某
2015-11-20 22:27:44 1535 1
原创 新思路团队-CSDN高校俱乐部
新思路团队(NewThread Team)是在2009年成立的,成立之初是由三个技术小白学长在帖老师的指导下,经过对前端自学的一点点摸索,就此,自我学习、自我摸索也成为了新思路团队的一个核心理念。在之后的数年时间内,团队成员们自我发掘兴趣志向,坚持自主钻研,相互协作,逐步完善成现有的八个技术小组,包括CPP,J2EE,iOS,DB,.NET,Feweb,Android,搜索引擎在内的八
2015-10-22 20:02:08 845
原创 机器人行走
某少年宫引进了一批机器人小车。可以接受预先输入的指令,按指令行动。小车的基本动作很简单,只有3种:左转(记为L),右转(记为R),向前走若干厘米(直接记数字)。 例如,我们可以对小车输入如下的指令: 15L10R5LRR10R20 则,小车先直行15厘米,左转,再走10厘米,再右转,...不难看出,对于此指令串,小车又回到了出发地。 你
2015-01-27 23:10:55 967
原创 Playfair密码变种加密
一种Playfair密码变种加密方法如下:首先选择一个密钥单词(称为pair)(字母不重复,且都为小写字母),然后与字母表中其他字母一起填入至一个5x5的方阵中,填入方法如下:1.首先按行填入密钥串。2.紧接其后,按字母序按行填入不在密钥串中的字母。3.由于方阵中只有25个位置,最后剩下的那个字母则不需变换。如果密钥为youandme,则该方阵如下:
2015-01-26 22:20:59 833
原创 求所有5位数的黑洞数
任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。请
2015-01-26 00:51:10 4786
原创 数据结构学习笔记之链表(C语言版)
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。 使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分
2015-01-04 18:34:19 1290
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人