- 博客(11)
- 资源 (30)
- 收藏
- 关注
原创 epoll_wait的timeout的误差
epoll_wait(timeout)会有一定的误差,一般是1/1000。CentOS release 5.5 (Final)Linux CCN-YZ-1-3n1 2.6.37-1 #2 SMP Fri Feb 25 14:50:02 CST 2011 x86_64 x86_64 x86_64 GNU/Linux/**build:g++ epoll-wait-devia
2012-08-23 11:41:22 4663
原创 强大的grep
从海量日志找到自己要的数据,grep工作得很好。1. 假设只关注warn和fatal日志,实际上程序还会打印出trace日志,可以用grep过滤:server 1990 false 21010 | egrep "(\[warn\])|(\[fatal\])" > error.log 2>&1 &2. 假设现在有3000个client连接,需要找出delay比较严重的client
2012-08-22 16:25:08 1041
原创 一个refine/refactor的例子
我觉得refine比refactor的幅度大,refactor主要是等价替换,而refine有时候直接寻找更好的方案。Server在管理Client的BufferTime,即决定什么时候应该发包的这部分逻辑,最初是这么写的:u_int32_t Connection::PerformIO(){ u_int32_t ret = PErrorCode::Success;
2012-08-21 13:05:07 1741
原创 关于软件测试的看法
我是少数自发去做过一段时间测试的研发,所以经常有朋友问我一些问题:如何做自动化测试?如何提高测试的精准度?如何提高测试的速度?告诉我如何测试?某某公司是如何做测试的?而且很神奇的是,这些问题往往不会在最初的产品研发阶段提出来,而是当产品发布,客户反馈出bug时,才会问这些”重要“的问题。为什么在后期才会关注这些问题?因为测试喜欢被当作替罪羊:如果研发尽力了,产品设计尽力了,
2012-08-13 18:25:28 1218 1
原创 使用原型——不要做躺在炸弹上的勇士
我们只能对我们熟知的东西编程,熟知必须要知道和了解。而知识是无限扩展的未知体,了解更多也意味着更多的未知。所以需要软件工程,需要design和arch,需要高级程序员和架构师,需要项目经理,需要软件团队,需要软件方法。当然,最需要的其实是限定问题的范围。譬如需求分析和产品计划,就是将问题简化,不必要的功能千万不要做,不做超前的计划,因为那是未知的知识的边缘。简单,一定要简单,只有简单的东西
2012-08-10 14:05:53 2492
原创 总结c++内存错误的典型情况
最近遇到了c++几张内存错误的几种典型情况:1. 拷贝构造函数导致重复释放:http://blog.csdn.net/winlinvip/article/details/76638622. 内存越界导致错误:这个在http://blog.csdn.net/winlinvip/article/details/7822762 提到过。3. 非虚析构函数导致内存泄漏:http://blog.
2012-08-09 10:48:27 1385
原创 任何时候都应初始化变量
指针不初始化,直接释放会导致内存错误,这个都很明白,变量的初始化,就没有那么的挑剔了,有时候初始化,有时候不。原因是指针若不初始化,基本上就玩完,变量很大程度上不会出问题。不过它隐藏的危险比指针更可怕:会导致程序莫名其妙的怪异行为。考虑如下代码:bool all_sent_out;if(!mfarm->SendMessage(&all_sent_out)){ exit(-
2012-08-08 14:40:24 1257
原创 异步Socket(非阻塞模式)的应用
异步Socket(非阻塞模式)的应用若Socket是同步模式(即阻塞模式):1. send(1024)需要等1024个字节发完了才会返回(或者socket被关闭了)。这使得server在和低速的client通信时被阻塞,所以高性能server要使用非阻塞方式。2. recv(1024)不会等1024个字节,但必须要有数据才行,否则会被阻塞。所以阻塞的recv通常需要判断是否有数
2012-08-08 13:05:41 2870
原创 socket效率到底如何
两台服务器用千兆交换机连接,带宽为1000Mbps,socket的效率到底如何?若server尽量快向client写数据,client收到数据后就丢弃,是否能占满千兆带宽?测试发现和每次发送的包大小有关系,TCP包为1000bits(125字节)以上就能占满带宽:因此,若client足够多而且都在请求数据,但是带宽上不去,就是服务器程序的问题了。协议本身会降低带宽,使用rtmp
2012-08-07 18:21:38 6682
原创 多线程还是那么猛
多线程需要线程同步,因此增加了系统复杂性,若能使用系统的异步机制(异步socket,异步io等),就应避免使用多线程。学生时代,典型的socket server是:1. 创建,绑定,侦听socket:socket(), bind(), listen()2. 创建线程,接受连接:pthread_create(), accept()3. 线程2接受客户端后,启动线程服务client:rec
2012-08-06 14:54:22 1555
原创 各种奇特的事情:内存错误,无常的段错误,堆栈消失
1. 在修改较多文件,make和执行,发现总是提示SegmentFault,调试也找不到原因(gdb调试时,往往进入某个普通的函数就SegmentFault)解决方法:全部重新编译可能会解决问题,原因不明。make clean; make。环境:g++/gcc (GCC) 4.4.4 20100726 (Red Hat 4.4.4-13) centos62. 程序突然就退出了,
2012-08-02 14:21:12 7843 1
Pattern.Oriented.Software.Architecture.Volume.2
2012-11-29
mp4 file format引用文档
2012-11-04
The.Cpp.Programming.Language.Special.Edition
2012-10-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人