自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 sBPM产品介绍

作者:CppExplore  http://www.cppblog.com/CppExplore/和http://blog.csdn.net/cppexplore同步发布。近3年没发文章,谨以本文总结我和团队兄弟们3年在业务之外的工作成果。 1产品目标降低高性能服务领域开发门槛,提高开发效率,同时解决测试、运维、监控、数据分析中的各类问题。围绕此目标,sBPM(snda B

2013-08-20 14:35:13 1235

原创 【原创】高性能服务器本质论

作者:CppExplore  http://www.cppblog.com/CppExplore/和http://blog.csdn.net/cppexplore同步发布一 服务器分类从软件性能角度,高性能服务器分:cpu密集型服务器/IO密集型服务器(1)CPU密集型:该类服务器没有对io的访问/没有同步点,性能瓶颈在于对cpu的充分利用。典型的如转发服务器/代理服务器/协议转换类服务器/分布式总线服务器等。(2)IO密集型:该类服务器存在对cache/db/硬盘等的同步访问,或者对fcgi/其他服务器等

2010-12-19 17:55:00 2027 1

原创 从同步互斥机制到智能指针使用成本

作者:CppExplore  http://www.cppblog.com/CppExplore/和http://blog.csdn.net/cppexplore同步发布一 semaphore机制古老的信号量机制,80年代初,从System V体系中产生,成为System v信号量。90年代,Posix标准确立,其中的信号量成为posix信号量。当前linux系统支持这两种信号量(man semget/ man sem_post)。System v信号量为有名信号量,可以用于多进程间的互斥同步。posix信

2010-08-28 18:24:00 4906 10

原创 单元测试分享

作者:CppExplore  http://www.cppblog.com/CppExplore/和http://blog.csdn.net/cppexplore同步发布 1 单元测试对象概述各个对象组织结构如下:职责简述如下:对象职责TestAssert测试断言:判定测试结果是否正确,一般类似断言表达。TestCase测试用例:多个测试断言组成一个测试用例。测试对象为一个类中的一个具体方法。TestSuite测试套件:多个测试用例组成一个测试套件。测试对象为一个类。MainTestSuite主测试套件

2010-06-28 09:19:00 1657

原创 内存相关分享

作者:CppExplore  http://www.cppblog.com/CppExplore/和http://blog.csdn.net/cppexplore同步发布一 linux内存管理以及内存碎片产生原因                             最底层使用伙伴算法管理内存页面。系统将所有空闲内存页面分10个组,每个组中的内存块大小依次是1,2,4......512个内存页面

2010-03-31 00:27:00 2173 1

原创 项目管理之 个人小结

一 项目管理流程1 项目定义在有限的时间、有限的人力、有限的资源内,完成即定的功能,并保证项目的质量。项目具有时效性/资源受限,功能边界明确等特点。项目失败,并不仅仅是指项目的功能没有完成。超时/超支都算做项目失败。2 项目管理目标可重复:项目的成功性可复制。一个项目成功,另一个项目也可以成功。成功不是偶然性。可管理:项目本身可管理,成功过程可控。3 项目生命周期项目具有固有的生命周期规律,项目管

2009-09-26 09:17:00 1390 1

原创 《java与模式》读书笔记

好久不更新了,拿以前的文章凑凑数,从java那边转一篇过来。最近发现一本,正好再温故一下当年的专业课内容,下面是这几天记的笔记.(并不是系统的讲解书中的内容)一  综述:1、不要使用接口定义常量2、自己少用标志接口3、不要继承具体类4、类层次的中间节点应该是接口或者抽象类,叶子是具体类5、子类应当扩展父类的责任,而不是覆写父类的责任6、面向接口编程7、不要滥用继承,组合优先于继承java中

2009-09-26 09:16:00 1063

原创 服务器技术系列综述(三)

网络请求包经过网络层(技术系列综述(一))被解析翻译成程序自定义的消息,之后被投递到业务线程的线程消息队列(技术系列综述(二))中。业务线程在队列的另一端取出消息,开始处理,这是本章要介绍的部分。业务处理部分:主要有会话类(Session)和会话管理类(SessionManager,常见该类为单例)。先给出类图,后文详细介绍:一 SessionManager的职责:(1)继承IMsgThread(

2009-09-26 09:14:00 1045

原创 服务器技术系列综述(二)

《技术系列综述(一)》介绍了网络层部分。网络层基本都是多路复用函数作为运行的主线程,使用管道或者sockpair与之通讯,这是网络层线程的固有特点,和业务线程的呈现方式完全不同。经过网络层以后,数据开始流向业务线程,现在就顺着数据流向往上看。一 业务线程《技术系列之 线程(一)》有对线程的一个入门描述,里面的消息队列只是示例,真实可用的可以看《技术系列之 线程(二)》。(1)业务线程的划分在业务层

2009-09-26 09:13:00 1097

原创 服务器技术系列综述(一)

本人职业是linux上网络服务器的开发,本文就网络服务器的系统架构设计的细枝末节展开讨论。欢迎任何的点评指导和讨论,尤其是对文中的缺点或者更好的方案。一 系统框架概述网络上的服务器,无论是嵌入式的网络设备,还是pc上服务器,整体结构以及主要思想都大体相同:根据业务模型确定主要数据结构,根据数据结构确定线程模型,在各个业务线程内根据围绕主要数据结构进行的操作确定状态机模型,低层使用网络层收发数据完成

2009-09-26 09:12:00 1406

原创 职业之路

在这个blog上写了几篇技术文章,一是记录下自己对技术的一点浅显的看法,二是在自己的认知范围内揭示系统级别的核心技术,希望能对后来人能有一点帮助。从系统角度而言,技术本身只是实现业务的载体,业务才是系统的灵魂。因此除技术外,也准备写点其它方面的东西,大抵也就是写下面几个系列的文章,技术系列、业务系列、系统系列、测试系列、团队管理系列。以前本blog上起名为系统设计系列的文章,现已全部改名为技术系列

2009-09-26 09:08:00 1079

原创 技术系列之 必备外围功能-log

log模块是一个小模块,却是每个系统必备的模块。优秀的系统一定会有优秀的log信息,也可以说全面到位的log信息在一定程度上决定了一个系统的健壮性。在linux上,log模块是跟踪程序运行,验证业务逻辑正确的唯一方法。一、功能一个优秀的log系统应该包含以下功能:(1)支持打印到屏幕、文件、socket、syslog(2)支持分级别打印(3)支持分模块打印(4)支持多线程(5)支持文件转储:按时间

2009-09-26 09:08:00 1558

原创 技术系列之 定时器(二)

一、上篇文章描述。文章《定时器(一)》http://www.cppblog.com/CppExplore/archive/2008/04/02/46111.html实现了一个定时器模块,这个实现每次延时时间到都要扫描所有的定时器对象,效率低下。开始设想的时候,LIST中的定时器对象保存间隔时间段的毫秒值,导致每次延时时间到都要做“时间减少操作”直到减少到零,并且得出不需排序的结论。二、改进。如果其

2009-09-26 09:04:00 1106

原创 技术系列之 定时器(一)

一、 基础知识1、时间类型。Linux下常用的时间类型有4个:time_t,struct timeval,struct timespec,struct tm。(1)time_t是一个长整型,一般用来表示用1970年以来的秒数。(2)Struct timeval有两个成员,一个是秒,一个是微妙。struct timeval {               long tv_sec;        

2009-09-26 09:01:00 998 1

原创 技术系列之 网络模型(三)多路复用模型

多路复用的方式是真正实用的服务器程序,非多路复用的网络程序只能作为学习或着陪测的角色。本文说下个人接触过的多路复用函数:select/poll/epoll/port。kqueue的*nix系统没接触过,估计熟悉了上面四种,kqueue也只是需要熟悉一下而已。一、select模型select原型:int select(int n, fd_set *readfds, fd_set *writefd

2009-09-26 08:57:00 1043

原创 技术系列之 网络模型(二)

本章主要列举服务器程序的各种网络模型,示例程序以及性能对比后面再写。一、分类依据。服务器的网络模型分类主要依据以下几点(1)是否阻塞方式处理请求,是否多路复用,使用哪种多路复用函数(2)是否多线程,多线程间如何组织(3)是否多进程,多进程的切入点一般都是accept函数前二、分类。首先根据是否多路复用分为三大类:(1)阻塞式模型(2)多路复用模型(3)实时信号模型三、详细分类。1、阻塞式模型根据是

2009-09-26 08:56:00 996

原创 技术系列之 网络模型(一)基础篇

全文针对linux环境。tcp/udp两种server种,tcp相对较复杂也相对比较常用。本文就从tcp server开始讲起。先从基本说起,看一个单线程的网络模型,处理流程如下:socket-->bind-->listen-->[accept-->read-->write-->close]-->close[]中代码循环运行,[]外的是对监听socket的处理,[]内的是对accept返回

2009-09-26 08:54:00 916 1

原创 技术系列之 线程(二)

为了后面写的《网络模型(二)》,多写一篇关于线程的。线程使用涉及的主要数据结构以及应用框架可以参考http://www.cppblog.com/CppExplore/archive/2008/01/15/41175.html。本文的主要目的是给出linux下实用的线程消息队列实现。一、linux上线程相关的操作有下面几种:(1)pthread_t类型的创建、属性创建设置等。这类具体可以:man p

2009-09-26 08:49:00 921

原创 技术系列之 内存管理(三)

(2)boost::pool系列。boost的内存池最低层是simple_segregated_storage,类似于Loki中的chunk,在其中申请释放block(boost中把block称为chunk,晕死,这里还是称其为block)采用了和loki的chunk中同样的算法,不同的是simple_segregated_storage使用void*保存block的块序号,loki中使用char

2009-09-26 08:41:00 1666

原创 技术系列之 内存管理(二)

2、定长内存池。典型的实现有LOKI、BOOST。特点是为不同类型的数据结构分别创建内存池,需要内存的时候从相应的内存池中申请内存,优点是可以在使用完毕立即把内存归还池中,可以更为细粒度的控制内存块。    与变长的相比,这种类型的内存池更加通用,另一方面对于大量不同的数据类型环境中,会浪费不少内存。但一般系统主要的数据结构都不会很多,并且都是重复申请释放使用,这种情况下,定长内存池的这点小缺点可

2009-09-26 08:40:00 970

原创 技术系列之 内存管理(一)

服务器设计人员在一段时间的摸索后,都会发现:服务器性能的关键在于内存。从收包到解析,到消息内存的申请,到session结构内存的申请都要小心处理,尽量减少内存数据copy,减少内存动态申请,减少内存检索。为达到这个目的,不同的地方有不同的方法,比如常见的包解析,使用缓冲区偏移以及长度来标识包内字段信息;内存使用量固定的系统,系统启动就申请好所有需要的内存,初始化好,等待使用的时候直接使用;基于li

2009-09-26 08:39:00 918

原创 技术系列之 状态机(二)

上接《系统设计之 状态机(一)》三、状态机实现(2)面向过程方式2、层次状态机模块实现。与常规状态机相比,它的FSM_STATE结构没有default_func,多了 FSM_STATE_ID parent; FSM_STATE_ID default_child;两个结构。状态机初始化的时候可以指定默认状态,为了防止指定的状态非叶结点,增加fsm_init方法。该状态机的事件处理算法简单描述如下:

2009-09-26 08:34:00 958

原创 技术系列之 状态机(一)

一、状态机描述状态机理论最初的发展在数字电路设计领域。在数字电路方面,根据输出是否与输入信号有关,状态机可以划分为Mealy型和Moore型状态机;根据输出是否与输入信号同步,状态机可以划分为异步和同步状态机。而在软件设计领域,状态机设计的理论俨然已经自成一体。Moore型状态机的输出只和当前状态有关,和输入无关,如果在软件设计领域设计出这种类型的状态机,则该状态机接受的事件都是无内蕴信息的事件(

2009-09-26 08:32:00 916

原创 技术系列之 线程(一)

废话不多说,详细介绍使用线程的优点好处请参考baidu、google。一、线程使用场景。使用线程的方式大致有两种:(1)流水线方式。根据业务特点,将一个流程的处理分割成多个线程,形成流水线的处理方式。产生的结果:延长单一流程的处理时间,提高系统整体的吞吐能力。(2)线程池方式。针对处理时间比较长且没有内蕴状态的线程,使用线程池方式分流消息,加快对线程消息的处理,避免其成为系统瓶颈。线程使用的关键是

2009-09-26 08:31:00 801

原创 项目管理之 项目阶段划分

一个项目从开始到结束会经历一系列的阶段。有效划分这些阶段,对进度控制、成本控制、质量管理、功能控制至关重要。一般的大中型软件开发公司,都有自己的阶段划分方法,定义的各阶段要完成的任务也不尽相同。本文就个人从研发角度理解到的,简单叙述一下开发的各个流程。(1)phase0:由市场人员反馈提出项目开发阶段。该阶段没有明显的时间周期,是项目的发起阶段。由相关人员提供产品的主要feature、市场前景的说

2009-09-26 08:30:00 5577

原创 测试系列之 c++ server测试全攻略

在c++的世界里,程序设计的优雅让位于程序的稳定性、健壮性。“好程序是测出来的”这句话在C++领域里得到了充分体现。下面是我在开发中使用的测试方法,抛砖引玉,和大家交流下。测试期间,关闭对core文件的限制,使用命令:ulimit -c unlimited(1)开发阶段,使用cppunit维护测试用例。我一般是用于测试解析类、算法类。从http://sourceforge.net/projects

2009-09-26 08:26:00 1562 4

原创 深入探究JFreeChart(2)

3 数据源处理 JFreeChart 中的数据源是DataSet接口类型。该接口有三个主要的子类接口:CategoryDataset、PieDataset、SeriesDataset CategoryDataset 接口的实现类基本上都维护了一个三元组的列表结构。不同的实现类中value 的类型不相同。唯一确定一个三元组。CategoryDataset的实现类提供对这个三元组的增删改查

2009-09-25 13:19:00 2584 3

原创 深入探究JFreeChart(1)

1 简介 JFreeChart 是 SourceForge.net 上的一个开源项目,它的源码和 API 都可以免费获得。 JFreeChart 的功能非常强大,可以实现饼图 ( 二维和三维 ) ,  柱状图  ( 水平 , 垂直 ), 线图 , 点图 , 时序图 , 甘特图 ,  股票行情图 , 混和图 ,  温度计图 ,  刻度图等常用商用图表,   图形可以导出成 PNG 和 JPEG

2009-09-25 13:00:00 1741 1

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