韩羽日记
hanyu1980
这个作者很懒,什么都没留下…
展开
-
RPC效率瓶颈
我发现RPC的调用曾经效率上很有问题,做了很多的努力,但是总是导致CPU占用过高,这个问题困扰了很久。在这个问题上,曾经做过很多努力不见效果,原来以为传输上的消耗太大,现在发现事情完全不是那么回事。 第一,RPC如果不指定端口,使用TCP的方式,会导致大量端口监听,这本身也是一种消耗。 第二,目前RPC调用是短连接的方式,这种方式每次连接都会认证。这是导致svchost过高的原原创 2006-02-13 13:42:00 · 2641 阅读 · 0 评论 -
使用Log4CXX出线停顿的问题
今天做了一个测试,使用了Log4CXX组件写日志。当时我用另外一台终端使用Windows远程桌面登录写日志的服务器上去。此时拔掉网线,远程桌面不断产生重连。其间记日志的地方停了30秒。不知道什么原因,苦恼中!原创 2007-08-16 15:14:00 · 1299 阅读 · 0 评论 -
快捷方式对应用程序的根路径的影响
今天做了一个测试,是关于快捷方式对应用程序的根路径的影响。通常我们在程序中可能用到文件系统。这时候路径的设置有两种:相对路径和绝对路径。绝对路径没有什么可以说的,但相对路径涉及到前缀的问题。通常是应用程序的所在路径为前缀,但涉及到快捷方式的情况下,可能就不一样了。快捷方式的属性中有“起始位置”一项,这项决定了相对路径的前缀,所以使用直接启动和快捷方式启动可能导致应用程序行为的不同。原创 2007-09-11 09:18:00 · 1230 阅读 · 0 评论 -
TaskInfo的一种用法
今天遇到一个问题是用TaskInfo解决的。在VC编译中,如果默认是DEBUG编译项,会生成DEBUG信息(VC中有生成DEBUG信息的选项),这些信息会存在.pdb文件中,这个文件和运行程序放在同一级目录下。运行程序和TaskInfo,在TaskInfo中可以看到程序具体调用的情况,非常管用。实时了解这些信息对DEBUG非常有用。原创 2007-10-29 18:58:00 · 1815 阅读 · 0 评论 -
线程本地存储(TLS)
以下内容摘自MSDN:线程本地存储 (TLS)线程本地存储 (TLS) 是一个方法,通过该方法,给定的多线程进程中的每个线程都可以分配存储线程特定数据的位置。通过 TLS API(TlsAlloc、TlsGetValue、TlsSetValue、TlsFree)方式支持动态绑定(运行时)的线程特定数据。除了现有的 API 实现,Win32 和 Visual C++ 编译器现在还支持静态绑定原创 2008-01-28 16:15:00 · 2561 阅读 · 1 评论 -
优先级队列的一种用法
一般来说,程序编写中使用到STL容器时,一般第一个模板参数是必选的,而后面的参数往往使用默认参数。当并不能说明后面的参数是没有用的。下面是一个优先级队列的使用实例,通过修改后面的模板参数,达到修改优先级队列行为的目的。structMyTaskStruct{ ACE_Time_Value tTaskStamp; std::stringstr;原创 2008-02-20 14:35:00 · 752 阅读 · 0 评论 -
Blade Server对PCI-e卡的支持
Blade Server是一种非常紧凑的架构,单机所占空间非常小。相对机架式Server,它最大的优点就是节省空间,从而节省不菲的机架租用费。但相对机架式Server,Blade Server最大的短板就是它因空间导致的扩展性。 为了解决这个问题,使Blade Server可以取代机架式Server,Blade Computer使用Expanssion方式解决对PCI原创 2008-03-07 09:58:00 · 696 阅读 · 0 评论 -
Windows服务超时时间
Windows服务的启动超时时间默认是30秒,但这并对对所有服务都有效,有些服务的时间可能超过30秒,这时候需要修改注册表来解决这个问题。注册表项为HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/ServicesPipeTimeout,这个值有可能不存在,如果不存在需要添加。类型为DWORD,单位是毫秒。原创 2008-03-19 17:19:00 · 5276 阅读 · 0 评论 -
进程和线程的区别
线程与进程的区别 多线程共存于应用程序中是现代操作系统中的基本特征和重要标志。用过UNIX操作系统的读者知道进程,在UNIX操作系统中,每个应用程序的执行都在操作系统内核中登记一个进程标志,操作系统根据分配的标志对应用程序的执行进行调度和系统资源分配,但进程和线程有什么区别呢? 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:转载 2008-03-24 14:54:00 · 1323 阅读 · 2 评论 -
RFC1925中文版——网络的12条军规
该军规适用于所有网络,并不局限于TCP/IP或者Internet。(1) 它必须可工作。(2) 无论推送多快或者优先级多高,都无法增加光的速度。(2a)推论,无论多么努力也不能在9个月内生下个孩子;你想使它更快的努力,反而会使它变得更慢。(3) 如果冲刺的足够猛,猪也可以飞起来。然而,这未必是个好主意。很难确定会在什么地方着陆。当它们从头顶飞过的原创 2008-01-16 21:11:00 · 2367 阅读 · 0 评论 -
浮点数相等比较和64位整数
我们在做浮点数相等比较的时候,常常使用==,这在常识上来说是完全正确的。但这并非是规范的做法,而且往往导致错误。浮点数是存在一定精度的小数。对于可以精确表示的数用==是可以比较的。但在做等于比较的时候,往往需要把精度考虑在内。单精度型和双精度型,其类型说明符为float 单精度说明符,double 双精度说明符。在Turbo C中单精度型占4个字节(32位)内存空间,其数值范围为原创 2008-04-15 11:58:00 · 2319 阅读 · 0 评论 -
char,TCHAR,WCHAR区别
#ifdef UNICODE typedef wchar_t TCHAR; #else typedef unsigned char TCHAR; #endif typedef unsigned char CHAR; typedef unsigned w原创 2008-04-22 15:39:00 · 4880 阅读 · 3 评论 -
WebSphere
v/:* {behavior:url(#default#VML);}o/:* {behavior:url(#default#VML);}w/:* {behavior:url(#default#VML);}.shape {behavior:url(#default#VML);} Normal 0 7.8 磅 0 2转载 2008-07-17 13:28:00 · 511 阅读 · 0 评论 -
WebLogic
v/:* {behavior:url(#default#VML);}o/:* {behavior:url(#default#VML);}w/:* {behavior:url(#default#VML);}.shape {behavior:url(#default#VML);} Normal 0 7.8 磅 0 2转载 2008-07-17 14:22:00 · 587 阅读 · 0 评论 -
ocx
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Font转载 2008-07-18 14:16:00 · 535 阅读 · 0 评论 -
Effective C++之38
条款38: 通过复合塑模出has-a或“根据某物实现出” 对于该点条款似乎是在说,继承并不是最好的手段。我对此表示同意。事实上我认为如果可以不用继承,就不用继承,继承远没有想象的那么好。 如果可以的话,Composition的意义非比寻常。事实上这才是构造对象的基本办法之一。那么在继承关系并不十分明确的时候,建议还是使用组合方式。原创 2007-02-09 18:16:00 · 712 阅读 · 0 评论 -
关于Socket编程的一点思索
今天在做测试的时候,发现Socket通信很慢的情况。这让我觉得需要有些地方要做一些优化的工作。现在使用的是异步Socket,使用同一个线程进行收发。在这种情况下,就会出现一个包可能在recv的时候无法一次收齐,特别是一些长度比较长的包。这时候应该有两种做法,一是在recv一次后,立刻让出线程,无论包有没有收完;二是,分成两个Socket,一个收一个发,不至于因为收的情况,影响到发的问题。这两种原创 2006-08-08 18:21:00 · 1166 阅读 · 0 评论 -
C++数组参数的说明
不要试图欺骗编译器。有这么一个函数,void test(char str[32]){……}想怎么调用这个函数?如果你不想传入参数怎么办?是否可以test(NULL)?呵呵,这是绝对不可以的,编译器认为这个参数的空间你已经申请了,所以在参数压栈的时候会导致程序崩溃,切记。test(NULL)仅限于参数为指针的情况,对数组并不适用。原创 2006-07-27 10:58:00 · 1858 阅读 · 0 评论 -
对呼叫状态机和模型状态机的思索
最近遇到一些问题,困扰了我很长时间,原因是状态机出现的问题。问题的起因是这样的,对于呼叫来说,原来就存在状态机,这是在信令协议中定义的。那么,从信令协议的消息交互到具体编程实现的模型是不完全吻合的。这时候出现的问题是如何协调这两者之间的关系?我觉得我所遇到的是案例是一个值得警醒的案例。在建模的时候就需要仔细思量,如何协调这二者之间的关系,使之不出现状态不吻合的情况。原创 2006-09-07 14:31:00 · 1151 阅读 · 0 评论 -
今日一小步,明日一大步
就像登山一样,可能爬了一段时间,虽然离顶峰还有很远,就到了体能的一个瓶颈。人生也是一样,时常遇到瓶颈,这时候应该何去何从?停步不前还是更进一步? 好多天没有更新Blog了,可能是到了体能的瓶颈,但是如果每天都停步不前,那么会是很可怕的事情,好在今天终于感觉可以继续前进了。 人生不能将就,需要不断努力地向前走,哪怕每一步迈得很小。原创 2006-09-12 18:28:00 · 1095 阅读 · 0 评论 -
关于C++异常抛出指针问题的探讨
在C++中,抛出的异常如果是一个对象,系统会将这个对象复制一份向外抛出。try{exception e;throw e;}catch(exception& e){}注意,抛出的e和catch到的e并不是同一个e,而是系统自动复制的一份对象。对指针来说,情况有所不同。try{exception* e = new exception();throw e;原创 2006-05-15 10:21:00 · 2097 阅读 · 0 评论 -
学无止境
学习是一个持续不断的过程,一刻也不能中止。前段时间的心态不是特别好,学习的进度很慢,没有足够让人满意的进步。虽然不是说毫无建树,但是进步也是有限。最近,为这种骄傲情绪付出了代价,过于轻视了现实,在项目上做出了错误的判断,要以此为戒,尽量避免再犯同样的错误。原创 2006-09-27 21:03:00 · 1021 阅读 · 0 评论 -
Windows下STLPort和ACE
这些天做了一些事情,主要是ACE和STLport在windows下的编译,今天编译很顺利,共有三个成果。STLport4.6.2 Windows版,ACE5.5 Windows版,ACE5.5 Windows STLport版,我很奇怪的是网上所说的ACE和STLport的兼容问题我居然没有遇到,继续跟踪。有人知道所谓的不兼容是怎么回事?我用的版本号是STLport4.6.2和ACE5.5。原创 2006-05-23 19:07:00 · 1018 阅读 · 0 评论 -
进阶C++异常
书接上文,先引用一句话,C++的异常处理机制被称为是不可恢复(nonresumptive)一旦异常被处理程序的执行就不能够在异常被抛出的地方继续。(《C++ Primer》第十一章)听过Java中跟据这种机制来做流程控制,当然这是需要付出代价的,我认为这个代价符合Java的编程原则,但这对于C++的编程原则来说,似乎有点代价过大了。异常的throw抛出的对象是以栈的形式来体现,throw出的异原创 2006-06-03 20:51:00 · 913 阅读 · 0 评论 -
异常的Rethrow分析
网上看了一篇类似的分析,仔细看了一下写的不错,现在把代码引用一下:try { try { // 抛出一个异常对象 throw MyException("ex_obj1"); }原创 2006-06-03 20:53:00 · 2085 阅读 · 0 评论 -
开始使用C++异常
我以前很少用到C++的异常,我看了重构中有一节,讲到了一个原则:用测试代替异常。我受这个影响,不爱用异常,认为这可能导致额外的开销。我看了《C++编程思想》中,在第二部分中,着重讲了异常。C++是看重异常的,这让我感觉有重新认识C++异常的必要。 我看了目前一些代码对异常的使用上,还是处于很低级的层次。比如:try{……}catch(…){printf(原创 2006-06-03 20:50:00 · 828 阅读 · 0 评论 -
纯虚析构函数
如果你想定义一个抽象基类,那怎么办?那么定义一个纯虚函数好了。那如果缺少这样一个函数怎么办?呵呵,不用担心,有现成的。就是析构函数。考虑如下代码。classBase{public: virtual ~Base() = 0;}; Base::~Base(){printf("Base::~Base()./n");} classDerive:publicB原创 2006-06-23 17:46:00 · 921 阅读 · 0 评论 -
auto_ptr源码剖析
// TEMPLATE CLASS auto_ptrtemplateclass auto_ptr {public: typedef _Ty element_type; explicit auto_ptr(_Ty *_P = 0) _THROW0() : _Owns(_P != 0), _Ptr(_P) {}原创 2006-06-27 09:29:00 · 1596 阅读 · 4 评论 -
离散数学,心中的痛
离散数学一直没有能学好,这真是心中很难受的事情。今天写了一点简单的程序,居然没有能够一气呵成,比较丢脸。enumTEST_STATE{ TEST_STATE_NORMAL=0x0, TEST_STATE_LOCALBLOCK=0x1, TEST_STATE_REMOTEBLOCK=0x2, TEST_STATE_BOTHBLO原创 2006-11-07 18:03:00 · 885 阅读 · 0 评论 -
strcpy函数
书接上文,从接到Socket中无法得到对方的IP和端口,应该在请求中发送过来。strcpy是比较好用的参数,用来做CString向char*的转换最为合适。char * __cdecl strcpy(char * dst, const char * src){ char * cp = dst; while( *cp++ = *src++ )原创 2006-07-10 16:07:00 · 864 阅读 · 0 评论 -
strncpy和memcpy辨析
char * __cdecl strncpy ( char * dest, const char * source, size_t count ){ char *start = dest; while (count && (*dest++ = *source++)) /* c原创 2006-07-10 16:19:00 · 1026 阅读 · 0 评论 -
字符串处理若干准则
看一下如下代码,存在问题么?char test1[] = "S";char test2[] = "Mytest!";int nSize = min(strlen(test1),strlen(test2));strncpy(test2,test1,nSize); 当然了,最终结果会成为Sytest!,这当然不是我们想要的结果,不过没有办法。这样的字符串处理是不严谨的。原创 2006-07-10 16:23:00 · 924 阅读 · 0 评论 -
Blog访问量突破10万,感谢所有人,四川加油
今天,我的Blog访问量突破10万,这本来是一个值得高兴的日子。但今天是全国哀悼日第三天,我怎么也高兴不起来。 相对很多公众Blog,10万的访问量是个很不起眼的数字,但是本Blog只是一个技术blog,是非常小众的领域,能有这么多的访问我已经非常高兴,非常满足了。 写Blog的初衷,是为了总结工作和生活中,技术方面一点一滴的进步。我并不是非常聪明的人原创 2008-05-21 10:06:00 · 696 阅读 · 0 评论