<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[CppExplore的专栏]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/CppExplore</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; CppExplore]]></copyright><item><title><![CDATA[sBPM产品介绍]]></title><link>https://blog.csdn.net/CppExplore/article/details/10107527</link><guid>https://blog.csdn.net/CppExplore/article/details/10107527</guid><author>CppExplore</author><pubDate>Tue, 20 Aug 2013 14:35:13 +0800</pubDate><description><![CDATA[作者：CppExplore  http://www.cppblog.com/CppExplore/和http://blog.csdn.net/cppexplore同步发布。
近3年没发文章，谨以本文总结我和团队兄弟们3年在业务之外的工作成果。

 1
产品目标
降低高性能服务领域开发门槛，提高开发效率，同时解决测试、运维、监控、数据分析中的各类问题。
围绕此目标，sBPM（snda B]]></description><category></category></item><item><title><![CDATA[【原创】高性能服务器本质论 ]]></title><link>https://blog.csdn.net/CppExplore/article/details/6085403</link><guid>https://blog.csdn.net/CppExplore/article/details/6085403</guid><author>CppExplore</author><pubDate>Sun, 19 Dec 2010 17:55:00 +0800</pubDate><description><![CDATA[作者：CppExplore  http://www.cppblog.com/CppExplore/和http://blog.csdn.net/cppexplore同步发布一 服务器分类从软件性能角度，高性能服务器分：cpu密集型服务器/IO密集型服务器(1)CPU密集型：该类服务器没有对io的访问/没有同步点，性能瓶颈在于对cpu的充分利用。典型的如转发服务器/代理服务器/协议转换类服务器/分布式总线服务器等。(2)IO密集型：该类服务器存在对cache/db/硬盘等的同步访问，或者对fcgi/其他服务器等]]></description><category></category></item><item><title><![CDATA[从同步互斥机制到智能指针使用成本 ]]></title><link>https://blog.csdn.net/CppExplore/article/details/5846450</link><guid>https://blog.csdn.net/CppExplore/article/details/5846450</guid><author>CppExplore</author><pubDate>Sat, 28 Aug 2010 18:24:00 +0800</pubDate><description><![CDATA[作者：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信]]></description><category></category></item><item><title><![CDATA[单元测试分享 ]]></title><link>https://blog.csdn.net/CppExplore/article/details/5698526</link><guid>https://blog.csdn.net/CppExplore/article/details/5698526</guid><author>CppExplore</author><pubDate>Mon, 28 Jun 2010 09:19:00 +0800</pubDate><description><![CDATA[作者：CppExplore  http://www.cppblog.com/CppExplore/和http://blog.csdn.net/cppexplore同步发布 
1 单元测试对象概述各个对象组织结构如下：职责简述如下：对象职责TestAssert测试断言：判定测试结果是否正确，一般类似断言表达。TestCase测试用例：多个测试断言组成一个测试用例。测试对象为一个类中的一个具体方法。TestSuite测试套件：多个测试用例组成一个测试套件。测试对象为一个类。MainTestSuite主测试套件]]></description><category></category></item><item><title><![CDATA[内存相关分享 ]]></title><link>https://blog.csdn.net/CppExplore/article/details/5435298</link><guid>https://blog.csdn.net/CppExplore/article/details/5435298</guid><author>CppExplore</author><pubDate>Wed, 31 Mar 2010 00:27:00 +0800</pubDate><description><![CDATA[作者：CppExplore  http://www.cppblog.com/CppExplore/和http://blog.csdn.net/cppexplore同步发布一 linux内存管理以及内存碎片产生原因                             最底层使用伙伴算法管理内存页面。系统将所有空闲内存页面分10个组，每个组中的内存块大小依次是1，2，4......512个内存页面]]></description><category></category></item><item><title><![CDATA[项目管理之 个人小结 ]]></title><link>https://blog.csdn.net/CppExplore/article/details/4596266</link><guid>https://blog.csdn.net/CppExplore/article/details/4596266</guid><author>CppExplore</author><pubDate>Sat, 26 Sep 2009 09:17:00 +0800</pubDate><description><![CDATA[一 项目管理流程1 项目定义在有限的时间、有限的人力、有限的资源内，完成即定的功能，并保证项目的质量。项目具有时效性/资源受限，功能边界明确等特点。项目失败，并不仅仅是指项目的功能没有完成。超时/超支都算做项目失败。2 项目管理目标可重复：项目的成功性可复制。一个项目成功，另一个项目也可以成功。成功不是偶然性。可管理：项目本身可管理，成功过程可控。3 项目生命周期项目具有固有的生命周期规律，项目管]]></description><category></category></item><item><title><![CDATA[《java与模式》读书笔记 ]]></title><link>https://blog.csdn.net/CppExplore/article/details/4596264</link><guid>https://blog.csdn.net/CppExplore/article/details/4596264</guid><author>CppExplore</author><pubDate>Sat, 26 Sep 2009 09:16:00 +0800</pubDate><description><![CDATA[好久不更新了，拿以前的文章凑凑数，从java那边转一篇过来。最近发现一本,正好再温故一下当年的专业课内容,下面是这几天记的笔记.(并不是系统的讲解书中的内容)一  综述:1、不要使用接口定义常量2、自己少用标志接口3、不要继承具体类4、类层次的中间节点应该是接口或者抽象类，叶子是具体类5、子类应当扩展父类的责任，而不是覆写父类的责任6、面向接口编程7、不要滥用继承，组合优先于继承java中]]></description><category></category></item><item><title><![CDATA[服务器技术系列综述（三） ]]></title><link>https://blog.csdn.net/CppExplore/article/details/4596255</link><guid>https://blog.csdn.net/CppExplore/article/details/4596255</guid><author>CppExplore</author><pubDate>Sat, 26 Sep 2009 09:14:00 +0800</pubDate><description><![CDATA[网络请求包经过网络层（技术系列综述（一））被解析翻译成程序自定义的消息，之后被投递到业务线程的线程消息队列（技术系列综述（二））中。业务线程在队列的另一端取出消息，开始处理，这是本章要介绍的部分。业务处理部分：主要有会话类(Session)和会话管理类(SessionManager,常见该类为单例)。先给出类图，后文详细介绍：一 SessionManager的职责：（1）继承IMsgThread(]]></description><category></category></item><item><title><![CDATA[服务器技术系列综述（二） ]]></title><link>https://blog.csdn.net/CppExplore/article/details/4596250</link><guid>https://blog.csdn.net/CppExplore/article/details/4596250</guid><author>CppExplore</author><pubDate>Sat, 26 Sep 2009 09:13:00 +0800</pubDate><description><![CDATA[《技术系列综述（一）》介绍了网络层部分。网络层基本都是多路复用函数作为运行的主线程，使用管道或者sockpair与之通讯，这是网络层线程的固有特点，和业务线程的呈现方式完全不同。经过网络层以后，数据开始流向业务线程，现在就顺着数据流向往上看。一 业务线程《技术系列之 线程（一）》有对线程的一个入门描述，里面的消息队列只是示例，真实可用的可以看《技术系列之 线程（二）》。（1）业务线程的划分在业务层]]></description><category></category></item><item><title><![CDATA[服务器技术系列综述（一） ]]></title><link>https://blog.csdn.net/CppExplore/article/details/4596248</link><guid>https://blog.csdn.net/CppExplore/article/details/4596248</guid><author>CppExplore</author><pubDate>Sat, 26 Sep 2009 09:12:00 +0800</pubDate><description><![CDATA[本人职业是linux上网络服务器的开发，本文就网络服务器的系统架构设计的细枝末节展开讨论。欢迎任何的点评指导和讨论，尤其是对文中的缺点或者更好的方案。一 系统框架概述网络上的服务器，无论是嵌入式的网络设备，还是pc上服务器，整体结构以及主要思想都大体相同：根据业务模型确定主要数据结构，根据数据结构确定线程模型，在各个业务线程内根据围绕主要数据结构进行的操作确定状态机模型，低层使用网络层收发数据完成]]></description><category></category></item><item><title><![CDATA[技术系列之 必备外围功能-log ]]></title><link>https://blog.csdn.net/CppExplore/article/details/4596235</link><guid>https://blog.csdn.net/CppExplore/article/details/4596235</guid><author>CppExplore</author><pubDate>Sat, 26 Sep 2009 09:08:00 +0800</pubDate><description><![CDATA[log模块是一个小模块，却是每个系统必备的模块。优秀的系统一定会有优秀的log信息，也可以说全面到位的log信息在一定程度上决定了一个系统的健壮性。在linux上，log模块是跟踪程序运行，验证业务逻辑正确的唯一方法。一、功能一个优秀的log系统应该包含以下功能：（1）支持打印到屏幕、文件、socket、syslog（2）支持分级别打印（3）支持分模块打印（4）支持多线程（5）支持文件转储：按时间]]></description><category></category></item><item><title><![CDATA[职业之路 ]]></title><link>https://blog.csdn.net/CppExplore/article/details/4596231</link><guid>https://blog.csdn.net/CppExplore/article/details/4596231</guid><author>CppExplore</author><pubDate>Sat, 26 Sep 2009 09:08:00 +0800</pubDate><description><![CDATA[在这个blog上写了几篇技术文章，一是记录下自己对技术的一点浅显的看法，二是在自己的认知范围内揭示系统级别的核心技术，希望能对后来人能有一点帮助。从系统角度而言，技术本身只是实现业务的载体，业务才是系统的灵魂。因此除技术外，也准备写点其它方面的东西，大抵也就是写下面几个系列的文章，技术系列、业务系列、系统系列、测试系列、团队管理系列。以前本blog上起名为系统设计系列的文章，现已全部改名为技术系列]]></description><category></category></item><item><title><![CDATA[技术系列之 定时器（二） ]]></title><link>https://blog.csdn.net/CppExplore/article/details/4596215</link><guid>https://blog.csdn.net/CppExplore/article/details/4596215</guid><author>CppExplore</author><pubDate>Sat, 26 Sep 2009 09:04:00 +0800</pubDate><description><![CDATA[一、上篇文章描述。文章《定时器（一）》http://www.cppblog.com/CppExplore/archive/2008/04/02/46111.html实现了一个定时器模块，这个实现每次延时时间到都要扫描所有的定时器对象，效率低下。开始设想的时候，LIST中的定时器对象保存间隔时间段的毫秒值，导致每次延时时间到都要做“时间减少操作”直到减少到零，并且得出不需排序的结论。二、改进。如果其]]></description><category></category></item><item><title><![CDATA[技术系列之 定时器（一） ]]></title><link>https://blog.csdn.net/CppExplore/article/details/4596210</link><guid>https://blog.csdn.net/CppExplore/article/details/4596210</guid><author>CppExplore</author><pubDate>Sat, 26 Sep 2009 09:01:00 +0800</pubDate><description><![CDATA[一、 基础知识1、时间类型。Linux下常用的时间类型有4个：time_t，struct timeval，struct timespec，struct tm。（1）time_t是一个长整型，一般用来表示用1970年以来的秒数。（2）Struct timeval有两个成员，一个是秒，一个是微妙。struct timeval {               long tv_sec;        ]]></description><category></category></item><item><title><![CDATA[技术系列之 网络模型（三）多路复用模型 ]]></title><link>https://blog.csdn.net/CppExplore/article/details/4596203</link><guid>https://blog.csdn.net/CppExplore/article/details/4596203</guid><author>CppExplore</author><pubDate>Sat, 26 Sep 2009 08:57:00 +0800</pubDate><description><![CDATA[多路复用的方式是真正实用的服务器程序，非多路复用的网络程序只能作为学习或着陪测的角色。本文说下个人接触过的多路复用函数：select/poll/epoll/port。kqueue的*nix系统没接触过，估计熟悉了上面四种，kqueue也只是需要熟悉一下而已。一、select模型select原型：int select(int n, fd_set *readfds, fd_set *writefd]]></description><category></category></item><item><title><![CDATA[技术系列之 网络模型（二） ]]></title><link>https://blog.csdn.net/CppExplore/article/details/4596199</link><guid>https://blog.csdn.net/CppExplore/article/details/4596199</guid><author>CppExplore</author><pubDate>Sat, 26 Sep 2009 08:56:00 +0800</pubDate><description><![CDATA[本章主要列举服务器程序的各种网络模型，示例程序以及性能对比后面再写。一、分类依据。服务器的网络模型分类主要依据以下几点（1）是否阻塞方式处理请求，是否多路复用，使用哪种多路复用函数（2）是否多线程，多线程间如何组织（3）是否多进程，多进程的切入点一般都是accept函数前二、分类。首先根据是否多路复用分为三大类：（1）阻塞式模型（2）多路复用模型（3）实时信号模型三、详细分类。1、阻塞式模型根据是]]></description><category></category></item><item><title><![CDATA[技术系列之 网络模型（一）基础篇 ]]></title><link>https://blog.csdn.net/CppExplore/article/details/4596195</link><guid>https://blog.csdn.net/CppExplore/article/details/4596195</guid><author>CppExplore</author><pubDate>Sat, 26 Sep 2009 08:54:00 +0800</pubDate><description><![CDATA[全文针对linux环境。tcp/udp两种server种，tcp相对较复杂也相对比较常用。本文就从tcp server开始讲起。先从基本说起，看一个单线程的网络模型，处理流程如下：socket-->bind-->listen-->[accept-->read-->write-->close]-->close[]中代码循环运行，[]外的是对监听socket的处理，[]内的是对accept返回]]></description><category></category></item><item><title><![CDATA[技术系列之 线程（二） ]]></title><link>https://blog.csdn.net/CppExplore/article/details/4596184</link><guid>https://blog.csdn.net/CppExplore/article/details/4596184</guid><author>CppExplore</author><pubDate>Sat, 26 Sep 2009 08:49:00 +0800</pubDate><description><![CDATA[为了后面写的《网络模型（二）》，多写一篇关于线程的。线程使用涉及的主要数据结构以及应用框架可以参考http://www.cppblog.com/CppExplore/archive/2008/01/15/41175.html。本文的主要目的是给出linux下实用的线程消息队列实现。一、linux上线程相关的操作有下面几种：（1）pthread_t类型的创建、属性创建设置等。这类具体可以:man p]]></description><category></category></item><item><title><![CDATA[技术系列之 内存管理（三） ]]></title><link>https://blog.csdn.net/CppExplore/article/details/4596171</link><guid>https://blog.csdn.net/CppExplore/article/details/4596171</guid><author>CppExplore</author><pubDate>Sat, 26 Sep 2009 08:41:00 +0800</pubDate><description><![CDATA[(2)boost::pool系列。boost的内存池最低层是simple_segregated_storage，类似于Loki中的chunk，在其中申请释放block（boost中把block称为chunk，晕死，这里还是称其为block）采用了和loki的chunk中同样的算法，不同的是simple_segregated_storage使用void*保存block的块序号，loki中使用char]]></description><category></category></item><item><title><![CDATA[技术系列之 内存管理（二） ]]></title><link>https://blog.csdn.net/CppExplore/article/details/4596166</link><guid>https://blog.csdn.net/CppExplore/article/details/4596166</guid><author>CppExplore</author><pubDate>Sat, 26 Sep 2009 08:40:00 +0800</pubDate><description><![CDATA[2、定长内存池。典型的实现有LOKI、BOOST。特点是为不同类型的数据结构分别创建内存池，需要内存的时候从相应的内存池中申请内存，优点是可以在使用完毕立即把内存归还池中，可以更为细粒度的控制内存块。    与变长的相比，这种类型的内存池更加通用，另一方面对于大量不同的数据类型环境中，会浪费不少内存。但一般系统主要的数据结构都不会很多，并且都是重复申请释放使用，这种情况下，定长内存池的这点小缺点可]]></description><category></category></item></channel></rss>