FFLIB之FFXML:极简化TinyXml 读取
摘要:
XML是结构化的标记语言,经常被用来做配置文件。由于XML的具有非常强的自描述属性,使用XML的配置文件往往直观易懂。C++中解析XML已经有一些非常成熟的类库可以使用,TinyXml是最受欢迎的解析类库之一。尽管TinyXml已经已经封装了解析细节,但是解析、遍历Xml仍然是稍显繁琐。FFXML针对如下需求对TinyXml做了轻量封装:
- 只把XML当成配置文件,也就是说,只有对XML的读取操作,在我日工作中,都是用XML当做纯配置文件,把XML当成序列化文件或数据文件的情况少之又少。
- XML配置文件不会太大,我们假设限制在几千行以内,通常XML配置文件不需要那么大,在这种需求下,的XML的读取效率不是问题,易用性会被放到首位,必须非常容易获取xml中的内容。
原创文章,转载请注明: 文章地址FFLIB之FFXML:极简化TinyXml 读取
C++ 多进程并发框架FFLIB之Tutorial
八月 8, 2012 by 知然 · Leave a Comment
FFLIB框架是为简化分布式/多进程并发而生的。它起始于本人尝试解决工作中经常遇到的问题如消息定义、异步、多线程、单元测试、性能优化等。基本介绍可以看这里:
http://www.cnblogs.com/zhiranok/archive/2012/07/30/fflib_framework.html
其中之所以特意采用了Broker模式,是吸收了MPI和Erlang的思想。
FFLIB 目前处于alpha阶段,一些有用的功能还需继续添加。但是FFLIB一开始就是为了解决实际问题而生。Broker 即可以以独立进程运行,也可以集成到某个特定的进程中启动。除了这些,FFLIB中使用epoll实现的网络层也极具参考价值。网上有一些关于epoll ET 和 LT的讨论,关于哪种方式更简单,本人的答案是ET。ET模式下epoll 就是一个完全状态机。开发者只需实现FD的read、write、error 三种状态即可。 Read more
原创文章,转载请注明: 文章地址C++ 多进程并发框架FFLIB之Tutorial
C++多进程并发框架
七月 31, 2012 by 知然 · 7 Comments
三年来一直从事服务器程序开发,一直都是忙忙碌碌,不久前结束了职业生涯的第一份工作,有了一个礼拜的休息时间,终于可以写写总结了。于是把以前的开源代码做了整理和优化,这就是FFLIB。虽然这边总结看起来像日记,有很多废话,但是此文仍然是有很大针对性的。针对服务器开发中常见的问题,如多线程并发、消息转发、异步、性能优化、单元测试,提出自己的见解。
面对的问题
从事开发工程中,遇到过不少问题,很多时候由于时间紧迫,没有使用优雅的方案。在跟业内的一些朋友交流过程中,我也意识到有些问题是大家都存在的。简单列举如下:
- 多线程与并发
- 异步消息/接口调用
- 消息的序列化与Reflection
- 性能优化
- 单元测试
多线程与并发
现在是多核时代,并发才能实现更高的吞吐量、更快的响应,但也是把双刃剑。总结如下几个用法:
- 多线程+显示锁;接口是被多线程调用的,当被调用时,显示加锁,再操作实体数据。悲剧的是,工程师为了优化会设计多个锁,以减少锁的粒度,甚至有些地方使用了原子操作。这些都为领域逻辑增加了额外的设计负担。最坏的情况是会出现死锁。
原创文章,转载请注明: 文章地址C++多进程并发框架
C++ 后台程序实时性能监控
六月 8, 2012 by 知然 · 4 Comments
面对的问题:
做后台程序经常会被问一句话,你的程序能撑多少人。一般官方一点的回答是这个得根据实际情况而定。实际上后台程序的性能是可以被量化的。我们开发的每一个服务器程序,对性能都非常有底,以为我们有数据。So,能撑多少人不少随便猜的,让数据报表来说话。
另外一种情况经常发生在开发人员之中,甲乙丙一起讨论接口实现,经常会说这么实现效率太低,那么实现效率才高等。实际上,效率高低都是相对而言的。一个函数1ms执行完毕够快吗?看起来挺快,若某接口需要此函数100次循环,那么情况就不是很乐观了。但是若此接口又是十天半个月才会被触发一次,似乎事情又变的不是很严重。说到这里想起《unix编程艺术》上关于性能优化的总结:
- 最有效的优化往往是优化之外的,如清晰干净的设计
- 最有效的优化就是不优化,摩尔定律会为你优化
- 如果确定要优化,必须找到真正的瓶颈
原创文章,转载请注明: 文章地址C++ 后台程序实时性能监控
Linux操作系统LILO的运行分析
五月 17, 2012 by admin · Leave a Comment
接上一篇文章:Linux操作系统的LILO详解
13.3.5 LILO的运行分析
我们知道了LILO怎么安装,包含什么东西,有什么功能,但LILO到底是怎么运行的呢?下面是代码分析层次的LILO运行过程,通过介绍这个过程,希望你能对整个Boot Loader这部分内容有一个深入的认识。
1.从软盘启动
Linux内核可以存入一张1.44MB的软盘中,这样做的前提是对“Linux内核映像”进行压缩,压缩是在编译内核时进行的,而解压是由装入程序在引导时进行的。
当从软盘引导Linux时,Boot Loader比较简单,其代码在arch/i386/boot/bootsect.S汇编语言文件中。当编译Linux内核源码时,就获得一个新的内核映像,这个汇编语言文件所产生的可执行代码就放在内核映像文件的开始处。因此,制作一个包含Linux内核的软磁盘并不是一件困难的事。
把内核映像的开始处拷贝到软盘的第一个扇区就创建了一张启动软盘。当BIOS装入软盘的第一个扇区时,实际上就是拷贝Boot Loader的代码。BIOS将Boot Loader读入至内存中物理地址0x07c00处,控制权转给Boot Loader,Boot Loader执行如下操作:
原创文章,转载请注明: 文章地址Linux操作系统LILO的运行分析
Linux操作系统的LILO详解
文章转载自:http://oss.org.cn
LILO是一个在Linux环境编写的Boot Loader程序(所以安装和配置它都要在Linux下)。它的主要功能就是引导Linux操作系统的启动。但是它不仅可以引导Linux,它还可以引导其他操作系统,如DOS,WINDOWS等等。它不但可以作为Linux分区的引导扇区内的启动程序,还可以放入MRB中完全控制Boot Loadr的全过程。下面让我们看看几种典型情况下硬盘的主引导扇区和各个分区的引导扇区内程序的内容。
(1)计算机上只装了DOS一个操作系统
这种情况和刚才介绍的DOS硬盘启动相对应,如图13.6所示。
图13.6 只有DOS的硬盘分区图
原创文章,转载请注明: 文章地址Linux操作系统的LILO详解
Linux操作系统内核3.3版本I/O Stack的流图
四月 9, 2012 by admin · Leave a Comment
2012年3月6日,thomas-krenn.com网站分享出来一张非常清晰全面描述Linux操作系统中的I/O Stack的流程图,分享的流程图是Linux操作系统内核3.3版本的I/O Stack,
I/O Stack流图分为几大部分:
1>.direct I/O 的O_Direct调用
2>.Page Cache;
3>.VFS,也即文件系统、网络通信等
4>.Block I/O层
5>.I/O调度方式;
6>.SCSI处理层;
7>.磁盘硬件设备;
详细的信息请见I/O Stack流程linux-io-stack-.jpg: Read more
原创文章,转载请注明: 文章地址Linux操作系统内核3.3版本I/O Stack的流图
Linux下的半自动磁盘清理工具
四月 1, 2012 by 风的尾巴 · Leave a Comment
事情起先是因为linux下的应用日志,堆积造成磁盘空间不足,当然你可以说,我有监控,我写了crontab, 我xxx很多方式都有,没必要专门针对此事做工具了。不过这些情况我都遇到过,主要是想到:
1、多个同学一起维护着相同的服务器,人有惰性都喜欢写crontab却不写注释,时间积累crontab -l发现居然有不少脚本在里面,而且干着相同的事,定期进行日志清理工作;
2、应用因为流量增加,日志量增速加快了,导致原先的crontab不能满足需求了;
实现的功能: Read more
原创文章,转载请注明: 文章地址Linux下的半自动磁盘清理工具
久游网络上海招聘平台运维工程师
三月 23, 2012 by admin · 2 Comments
职位名称:平台运维工程师
公司名称:久游网络科技有限公司
网站地址:www.9you.com
工作地点:上海
薪资待遇:面议
职位类型:简历直递,即非猎头职位(注:直接投递到技术部门)
职位描述:
1.负责游戏服务器的规划部署,对服务器构架和网络进行优化和改进; Read more
原创文章,转载请注明: 文章地址久游网络上海招聘平台运维工程师
上海网络游戏公司招聘Linux系统运维工程师
三月 20, 2012 by admin · 4 Comments
职位名称:运维工程师
公司名称:上海沙舟信息科技
工作地点:上海
职位类型:直接招聘非猎头推荐(注:简历直接发送到技术团队负责人的邮箱)
职位描述:
1.负责游戏服务器的规划部署,对服务器构架和网络进行优化和改进;
2.负责突发性事件的快速响应和处理,解决服务器和网络故障; Read more
原创文章,转载请注明: 文章地址上海网络游戏公司招聘Linux系统运维工程师

