- 博客(116)
- 收藏
- 关注
转载 来自同行朋友的book list
<br />**************************************************************************<br />* 体系篇<br />************************<br /><br />+------------+------------------------+----------------+<br />| GUI(L4) | Network/DB(L5) | 2D/3D (L6) |<br />+----
2011-04-24 09:18:00
1191
转载 来自同行朋友的wok list
<br />代码阅读==== 语言 ====<br />lua, http://www.lua.org/, http://luajit.org/<br />erlang, http://www.erlang.org/<br />python, http://www.python.org/golang, http://golang.org/, http://go-lang.cat-v.org/java, http://openjdk.java.net/The Computer LanguageBenchmar
2011-04-19 21:34:00
1379
原创 管理 MySQL 的 binlog
<br /><br /> 今天在作游戏DB的压力测试时,运行测试用例一段时间后,发现客户端实然登录不了,后经定位,自己现是mysql binlog日志写满,导致mysql不能正常工作了,在网上找了这篇讲述binlog管理的资料,先记录这个问题<br /> <br />*************************************<br />* 关于 binlog *<br />********************
2011-03-01 14:28:00
1586
转载 Linux原子操作
所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位,因此这里的原子实际是使用了物理学里的物质微粒的概念。 <br /><br />原子操作需要硬件的支持,因此是架构相关的,其API和原子类型的定义都定义在内核源码树的include/asm/atomic.h文件中,它们都使用汇编语言实现,因为C语言并不能实现这样的操作。 <br /><br />原子操作主要用于实现资源计数,很多引用计数(refcnt)就是通过原子操作实现的。原子类型定义
2011-02-23 22:15:00
971
转载 awk处理多个文件
<br />awk的数据输入有两个来源,标准输入和文件,后一种方式支持多个文件。<br /><br />如:<br />1. shell的Pathname Expansion方式:awk '{...}' *.txt <br /><br /># *.txt先被shell解释,替换成当前目录下的所有*.txt,<br /># 如当前目录有1.txt和2.txt,则命令最终为awk '{...}' 1.txt 2.txt<br /><br /><br />2. 直接指定多个文件: awk '{...}' a
2011-02-14 17:11:00
15345
2
转载 awk学习精要
1. awk语言的最基本功能是在文件或字符串中基于指定规则来分解抽取信息,也可以基于指定的规则来输出数据。完整的awk脚本通常用来格式化文本文件中的信息。2. 三种方式调用awk1) awk [opion] 'awk_script' input_file1 [input_
2011-01-13 20:37:00
1021
转载 Awk 中变量作用域的问题
本文从两个错误的例程开始,提出 Awk 中全局变量污染的现象,并分析其发生的原因。接下来,针对 Awk 变量作用域的特点,提出两种避免全局变量污染的常用方法,引出 Awk 中定义局部变量的方法,并提出修改过后的代码。然后,通过 Awk 的变量调试功能,提出修改过后代码存在的不足,
2011-01-12 11:43:00
5073
原创 awk应用技巧
1: 引用自身的变量不需要加 $ 符号,如 NF,NR等2: 引用外部变量需用 ' ' 包围变量名,如 '$1 ~ /'$pattern'/'3: 如果要在AWK操作前给变量赋值, 用-v , 如 AWK -v str=abcd4: AWK 的默认动作是 print
2011-01-04 20:12:00
2606
转载 几种分布式存储系统的分析
<br />分布式文件系统设计主要关注几个方面:<br />设计特点、分布式能力、性能、容灾、维护和扩展、成本<br /> <br />分布式文件系统主要关键技术:<br />全局名字空间、缓存一致性、安全性、可用性、可扩展性<br /> <br />其他关键技术:<br />文件系统的快照和备份技术、热点文件处理技术、元数据集群的负载平衡技术、分布式文件系统的日志技术<br /> <br /> <br />一、GFS(google file system)<br />GFS与过去的分布式文件系统有很多相同
2010-12-31 00:02:00
28270
原创 ACE的编译与安装(linux篇)
<br />(一)源码包获取<br /> 这个和windows篇的相同,不再赘述!<br /> <br />(二)编译步骤<br />1、 用tar zxvf命令解压至一目录,如:/usr/local/ACE_wrappers<br />2、 在源码解压目录下创建一个编译目录如objdir,即/usr/local/ACE_wrappers/objdir<br />3、 cd objdir,执行../configure && make && make install;<br /> <br />注:如果RP足
2010-12-30 17:49:00
3062
原创 ACE的编译与安装(windows篇)
(一)源码包的获取1、下载最新的ACE源码包,我的是ACE+TAO+CIAO-6.0.0.tar.gz;2、解压至一目录如:D:/ACE_wrappers;(二)设置环境变量1、在操作系统添加一个名为ACE_ROOT的用户环境变量,值为刚才ace的解压路径D:、ACE_wrappers;2、添加用户的Path环境变量,值为%ACE_ROOT%/lib,这样才能保证系统能找到ace生成的动态连接库;3、设置VS2005的C++开发项目信息,依次打开菜单 工具-选项-项目和解决方案-VC++目录 ,在右侧目录列
2010-12-30 11:27:00
1404
转载 系统性能监控--linux top命令详解
<br /> <br />top命令和ps命令的基本作用是相同的,显示系统当前的进程和其它状况;但是top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。如? 前台执行该命令,它将独占前台,直到用户终止该程序为止。<br /><br />比较准确的说,top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用、内存使用、执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。在后面的介绍中将把命令参数和交
2010-12-21 11:41:00
750
转载 Erlang User Conference 2010见闻(兼谈程序员职业生涯)
1. Erlang User Confernece 2010<br />这是我第一次参加关于Erlang的技术大会,总来的说收获非常大,不管是技术上的还是非技术上的都是如此。首先不得不说的是会议举行的地点。我从别人那得知之前的会议一直都是在Ericsson的总部大楼举行的,但是因为参会人数越来越多,好像是从去年开始就转移到市中心一个很有历史的电影院ASTORIA举行了。由于这个举办地是电影院的缘故,从去年开始EUC就开始有电影海报了!去年海报是由哈利波特改的,今年的是星球大战。去年那张如下,有意思吧?<br
2010-11-29 20:04:00
900
转载 Erlang User Conference 2010见闻(兼谈程序员职业生涯)
1. Erlang User Confernece 2010<br />这是我第一次参加关于Erlang的技术大会,总来的说收获非常大,不管是技术上的还是非技术上的都是如此。首先不得不说的是会议举行的地点。我从别人那得知之前的会议一直都是在Ericsson的总部大楼举行的,但是因为参会人数越来越多,好像是从去年开始就转移到市中心一个很有历史的电影院ASTORIA举行了。由于这个举办地是电影院的缘故,从去年开始EUC就开始有电影海报了!去年海报是由哈利波特改的,今年的是星球大战。去年那张如下,有意思吧?<br
2010-11-29 20:03:00
1185
转载 十年学会编程---聆听前辈的声音
为何人人都这么着急?<br />信步走进任何一家书店,你会看到名为《如何在7天内学会Java》的书,还有各种各样类似的书:在几天内或几小时内学会Visual Basic, Windows, Internet等等,一眼望不到尽头。我在Amazon 上做了如下的 强力检索 : pubdate: after 1992 and title: days and(title: learn or title: teach yourself)<br />得到了248个结果。前78个都是计算机类书籍(第79个是 Learn
2010-11-29 20:02:00
774
转载 应用OProfile作性能测试(2)
1. 概述<br /><br />oprofile 是 Linux 平台上,类似 INTEL VTune 的一个功能强大的性能分析工具。<br /><br />其支持两种采样(sampling)方式:基于事件的采样(event based)和基于时间的采样(time based)。<br /><br />基于事件的采样是oprofile只记录特定事件(比如L2 cache miss)的发生次数,当达到用户设定的<br />定值时oprofile 就记录一下(采一个样)。这种方式需要CPU 内部有性能计数器(
2010-11-22 16:23:00
984
转载 应用OProfile作性能测试(1)
评测 是表示不同性能特性和特征的数据的形式化总结或分析,它通常以图形和表的形式的出现。评测表提供为特定的处理器事件收集的采样的百分数或数量,比如高速缓存线路故障的数量、传输后备缓存( TLB )故障的数量,等等。 Oprofile 是用于 Linux 的若干种评测和性能监控工具中的一种。它可以工作在不同的体系结构上,包括 IA32, IA64 和 AMD Athlon 系列。它的开销小,将被包含在(Linux)2.6 版的内核中。Oprofile可以帮助用户识别诸如循环的展开、高速缓存的使用率低、低效的类型
2010-11-22 15:45:00
973
原创 doxygen小试牛刀
今天试用了一下传说中的doxygen,用一句话概括就是:很强大,很方便! 在sourceforge下载了最新版本1.7.2(http://sourceforge.net/projects/doxygen/files/),又在网上找了几篇介绍文档,就开工研究了。总的来说,应用其GUI的配置向导很方便,下面把小试牛刀的应用心得小结如下:(1)将其所有默认的UTF-8编码,替换成GBK,以支持中文的正确显示;(2)记得勾选生成chm的配置选项,并检查编译路径,如下所示:GENERATE_HTMLHELP
2010-11-09 18:28:00
776
转载 游戏服务器中的数据库异步操作技术和游戏数据的保存机制
<br /> 在游戏服务器中,处理玩家登陆需要向数据库查询玩家的账号和密码,玩家上线和下线需要对玩家的角色数据从数据库中读取和保存。可以说,相对于游戏逻辑处理来说,数据库操作是一种相对很慢的操作,即便你通过使用多个线程多个数据库连接来提高数据库操作的处理能力,但是,在高并发高负载的服务器应用中,这样仍然会是相当的负载瓶颈。设想这样一种设计方案,见下图:<br /><br /> 在大量玩家登陆游戏服务器时,由于有大量的数据库访问请求,即便是有自己实现的CACHE机制,还是会导致服务器耗尽所有的逻辑线
2010-10-10 09:16:00
2352
转载 网游开发中选择线程模型的思考
<br />一个典型的游戏服务器设计中,一般都是用的多线程,服务器中一般运行两类线程,N个SOCKET IO线程,1个逻辑线程,<br />IO线程接受客户端发来的信息,通过消息队列发送给逻辑线程处理后,再发送消息给客户端,发送消息这里一般是IO线程处理实际发送。<br /><br />其实我认为,如果逻辑线程都是消耗的CPU运算资源的话,服务器完全采用单线程的方式来做。<br /><br />首先,我们看IO处理,基本就是数据入队、出队,send、recv操作,作为服务器的SOCKET处理一般都是异步SO
2010-10-10 09:14:00
2748
2
转载 游戏服务器架构设计中的一些思考
<br />1、 游戏世界由很多个游戏对象组成(游戏角色、物品、NPC、技能等); <br /> <br />2、 一个游戏对象的有效数据主要存放在客户端、游戏服务器和持久性数据库中;<br /> <br />3、 游戏对象的处理可划分为与位置有关的和与位置无关的,如公会处理、物品处理等主要行为可以看作是与位置无关的处理,而NPC(AI)、战斗、移动这类的主要行为可以看成是与位置有关的。<br /> <br />4、 从客户端的角度来看,游戏行为可分为四类动作: <br />a) 来自服务器端的动作,如另外
2010-10-10 09:03:00
1897
原创 一位程序员兄弟的自白
<br />苏格拉底曾经说过:没有审视的人生是不值得过的!<br /><br />我77年的!<br />该有的经济基础都有了。<br /><br />但<br />我回顾我的过去,我非常地后悔。<br />我是98年电子科大毕业的。<br />可是,我是在最近三年才开始静下心看书的。<br /><br />我如果能在毕业不久,甚至可以说大学的时候就能早点能静下心来看书、学习的话。<br />我现在无论从经济层面还是知识层面,都会高好几个档次。<br />我想我的这个假设也适合这里的大多数兄弟。<br />
2010-09-09 21:38:00
1085
原创 程序员的生活哲学
看到同路人之工作学习心得,拿来用以自勉!1、学会和习惯写伪码!2、挨着挨着地要作经典书的习题!3、坚持看英文原版!4、有心得就记下来,最后整理成文章。5、找水平差别不大的人一起讨论,或者找水平差别大的,但有学习热情的人来启发他。6、看经典的书籍。反复看,看到完全理解为止。
2010-09-08 20:12:00
997
转载 网游数据的推和拉
<br />应该允许客户端自行决定从服务器获取数据的方式。<br />1. 拉方式:请求时才发送。<br />2. 推方式:服务器主动发送。<br />客户端可以设定方式。<br />如客户端进入简化模式,不需要显示周围的玩家, 就设为请求时才发送周围玩家信息。<br />以位置同步信息为例:<br />假设服务器设定100-1000m范围内的位置同步信息的刷新间隔为3s.<br />客户端可以自主选择以下刷新方式:<br />1. 以不小于3s的间隔主动向服务器请求。如对于视野边缘的,刷新间隔可以是10s
2010-08-23 23:28:00
1146
转载 对一个服务器的几步优化
<br />最近写了一个服务器,业务逻辑很简单,每个协议包往服务器上报数据, 每个数据包中可能有N块数据需要保存在数据库中的.显然, 这个业务逻辑是不能使用类似memcached这样的缓存的, 因为每条数据都是相对独立的, 而且必须保证每个数据都保存到数据库中.这里抛开服务器最基本的那些IO模型之类的不说,谈谈对这个服务器的几个优化步骤. 1) 最简单的处理最简单的处理就是按部就班的,每条数据老老实实的插入到数据库中.显然, 这样做的效率是低的, 如果并发量大的时候,mysql负载变大,而服务器阻塞在数据库
2010-08-23 23:26:00
904
转载 epoll为什么这么快
<br />epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,在开始讨论这个问题之前,先来解释一下为什么需要多路复用IO.<br /><br />以一个生活中的例子来解释.<br /><br />假设你在大学中读书,要等待一个朋友来访,而这个朋友只知道你在A号楼,但是不知道你具体住在哪里,于是你们约好了在A号楼门口见面.<br /><br />如果你使用的阻塞IO模型来处理这个问题,那么你就只能一直守候在A号楼门口等待朋友的到来,在这段时间里你不能
2010-08-23 23:20:00
812
转载 多进程服务器中,epoll的创建应该在创建子进程之后
<br />看我的测试代码,似乎应该是在创建子进程之后创建epoll的fd,否则程序将会有问题,试将代码中两个CreateWorker函数的调用位置分别调用,一个在创建epoll fd之前,一个在之后,在调用在创建之前的代码会出问题,在我的机器上(linux内核2.6.26)表现的症状就是所有进程的epoll_wait函数返回0, 而客户端似乎被阻塞了:<br /><br />服务器端:#include <iostream><br />#include <sys/socket.h><br />#includ
2010-08-23 23:19:00
856
转载 epoll学习笔记
epoll有两种模式,Edge Triggered(简称ET) 和 Level Triggered(简称LT).在采用这两种模式时要注意的是,如果采用ET模式,那么仅当状态发生变化时才会通知,而采用LT模式类似于原来的select/poll操作,只要还有没有处理的事件就会一直通知.<br /><br />以代码来说明问题:<br />首先给出server的代码,需要说明的是每次accept的连接,加入可读集的时候采用的都是ET模式,而且接收缓冲区是5字节的,也就是每次只接收5字节的数据:<br />#inc
2010-08-23 23:16:00
724
转载 在VS2005中应用多个其它编译器
<br /> 在Visual C++ 2005中,如何调用其它编译器编译cpp文件呢? 换句话说,如何把其它编译器集成到VC2005的IDE中呢?<br />象ICC这样的编译器安装之后会自动集成进来,要集成其他编译器那还得自己动手。下面介绍一种简单、浅层的“集成”方法。<br />你也许注意到了,在VC2005的IDE中是不能编译单个.cpp文件的,除非把它放在工程中。但是,我们可以通过调用外部工具实现编译单文件。<br /> 下面以调用G++为例说明如何编译单个.cpp文件。如果要
2010-08-19 23:24:00
3005
原创 Intel多核编程培训小结
<br /> 这两天参加公司引进的外部课程《Intel多核编程》的培训,邀请的是Intel中国的两位专家,其中一位是《软件调试》的作者张银奎老师,现将基本内容小结如下,以便自己日后回顾。<br /> <br />(1)多核编程基本理念:任务分解,常用方法是给不同的子任务进行编号,然后,将线程各个子任务一一映射;<br />(2)编译器选项对程序性能优化的意义:一般在release版本中,建议选择-O2选项;<br />(3)Intel编译器特有编译优化功能:PGO;<br />(4)在Intel
2010-08-18 22:35:00
1614
转载 有关volatile变量和const常量
<br />在通用的c语言里,加volatile是为了c编译器的优化器对数据流进行分析,尽可能避免访问存储器,如果在程序中与访问存储器有关的代码和用c语言书写的代码完全相同,必须使用volatile来标明这些访问,编译器不能优化任何对volatile变量的引用,而const则是对常量的定义。 const定义视分散加载文件情况而定。 如果分散加载文件将代码都放到RAM里执行,即使你声明的是const类型,也被放到了RAM。如果分散加载文件将代码都放到ROM里执行,则当被声明的变量为const类型时,编译器将其
2010-08-18 00:39:00
1082
原创 Linux服务器程序性能测试的一些思考
<br /> 工作中对项目压力测试的一些心得,先自我作一个小结吧!(一)宏观与微观相结合 (1)宏观层面 即系统的一些关键性能指标,如:各进程所占CPU的百分比、内存消耗、网络包量、磁盘IO等等,详细指标列举如下:<br />名称<br />描述<br />参考值<br />CPU useage<br />CPU 的使用时间百分比。<br />平均值小于70%<br />Process virtual memery size<br />进程使用的内存空间总量,包括物理内存和swap内存
2010-07-24 09:24:00
2547
原创 linux的Listen调用详解
listen系统可以使一台主机上的一个tcp socket在某个端口号被动侦听,等待来自其它主机的tcp socket的连接请求,下面是listen系统调用的函数原型: #include int listen(int s, int backlog); backlog是侦听队列的长度,在内核函数中,首先对backlog作检查,如果大于128,则强制使其等于128。接下来要检查结构体struct sock的成员sk_state,即当前socket的状态,如果不为T
2010-07-02 18:16:00
15499
转载 Linux服务器运行状况全面监测
<br /> <br />随着Linux应用的日益广泛,有大量的网络服务器使用Linux操作系统。为了全面衡量网络运行状况,就需要对网络状态做更细致、更精确的测量。SNMP协议的制订为互联网测量提供了有力支持。计算机系统是 由软件系统硬件系统组成的,检测硬件状态对于保障整个系统的稳定是非常重要的。不论操作系统是使用Linux、还是Windows,一旦硬件出现故障,那么整个系统的安全就严重了。这里我们主要监测Linux服务器的CPU、硬盘、内存、网络接口、主板等硬件的工作状态。<br />一、/pr
2010-07-02 15:48:00
6151
原创 Linux系统常用性能监测工具
<br />sysstat工具包提供的主要命令:iostat mpstat sar<br />sar的最后两个参数一般是interval count<br />1、sar -u 1 5<br />输出CPU使用情况的统计信息,每秒输出一次,一共输出100次<br />17时06分01秒 CPU %user %nice %system %iowait %idle<br />17时06分02秒 all 1.27 0.00 0.51 1.01 97.22<br />17时06分03秒 all 0.00 0.00
2010-07-02 15:46:00
1325
1
原创 感受大师风范——侯捷谈程序人生
去年有幸在公司一睹侯大师风采,有同事把演讲精要记录下来,这里摘录一份,以常自励之! 杂谈——将相本无种,男儿当自强。忠于内心,忠于兴趣,把吃苦当作兴趣。兴趣/热情——众里寻她千百度。执着——不信青春换不回,不容青史尽成灰(后二句:低回海上酬功宴,万
2010-06-24 10:10:00
1441
转载 Linux下面socket编程的非阻塞TCP研究
<br /> <br /> tcp协议本身是可靠的,并不等于应用程序用tcp发送数据就一定是可靠的.不管是否阻塞,send发送的大小,并不代表对端recv到多少的数据。<br /> 在阻塞模式下, send函数的过程是将应用程序请求发送的数据拷贝到发送缓存中发送并得到确认后再返回.但由于发送缓存的存在,表现为:如果发送缓存大小比请求发送的大小要大,那么send函数立即返回,同时向网络中发送数据;否则,send向网络发送缓存中不能容纳的那部分数据,并等待对端确认后再返回(接收端只要将数据收
2010-06-23 15:31:00
1129
原创 Socket编程中的EAGAIN
<br /> 在Linux中使用非阻塞的socket的情形下。<br />(一)发送时<br />当客户通过Socket提供的send函数发送大的数据包时,就可能返回一个EGGAIN的错误。该错误产生的原因是由于send函数中的size变量大小超过了tcp_sendspace的值。tcp_sendspace定义了应用在调用send之前能够在kernel中缓存的数据量。当应用程序在socket中设置了O_NDELAY或者O_NONBLOCK属性后,如果发送缓存被占满,send就会返回EAGAIN的错误。<b
2010-06-23 14:58:00
1765
原创 linux下让进程运行在指定的cpu上(二)
<br /> 在SMP情况下,Linux调度器有负载均衡机制,将一个进程在不同CPU之间进行迁移。因此,一个进程运行在哪个CPU上是不确定的,但有时候为了测试数据方便,却有这样的需求,就是将某个进程绑定到一个CPU上运行。<br />怎么办呢?如果你有源代码,那么很简单,在代码里面加上sched_setaffinity()函数就可以了,但如果没有呢?<br />没关系,我们有秘密武器,那就是taskset命令。<br />该命令最简单的用法是:<br />taskset [mask] [command]<
2010-06-23 14:39:00
2798
转载 linux下代码覆盖率检查工具---gcov的用法
1.增加编译和链接的参数:-fprofile-arcs -ftest-coverage以Eclipse为例,为一个C++工程增加上述参数:<br />Project->Properties->C/C++ Build->Settings->GCC C++ Compiler->Command: 输入 g++ -fprofile-arcs -ftest-coverage<br /><br />Project->Properties->C/C++ Build->Settings->GCC C++ Linker->C
2010-06-23 09:24:00
1977
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅