自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

C++是促进脑死亡的最佳方式

一个老程序员坐在这个角落,看眼前人来人往。

  • 博客(22)
  • 资源 (1)
  • 收藏
  • 关注

原创 ACE的陷阱

                             ACE的陷阱坦白说,使用这个标题无非是希望能够吸引你的眼球,这篇文章的目的仅仅是为了揭示一些ACE缺陷的。文章适合的读者是对ACE(ADAPTIVE Communication Environment)有一定研究,或者正在使用ACE从事项目开发的人士参考。如果你对C++还是新手,甚至包括ACE知识初学者,(但你想飞的更高),

2008-09-12 03:50:00 26253 18

原创 总结和如何用好ACE

21         总结和如何用好ACE21.1           实践,不断尝试大学毕业生中能成为好的程序员绝对不是纯粹考试得高分死记公式拿奖学金的同学 ,而是那些熬夜写代码的狂人,哈哈。计算机是一门实践科学,你只有不断尝试才能进步。21.2           阅读的ACE代码好像是Linus(虽然他好像有点抵触C++,哈哈),好像是Linus Torvalds在回答一

2008-09-12 03:46:00 4601

原创 杂项

 20         杂项这一节列一些ACE使用中要注意的一些问题。20.1           ACE_Reactor的初始化应尽量提前由于为了一些自己需要的特性,我一般会自己初始化ACE_Reactor,而不是让系统默认初始化。要注意必须在程序的最开始就初始化ACE_Reactor。由于ACE的很多代码都会使用ACE_Reactor,包括日志的策略类。所以ACE_Reac

2008-09-12 03:41:00 1750 1

原创 自己初始化Timer_Queue的尺寸

19         自己初始化Timer_Queue的尺寸如果你的应用有大量的定时器,你最好自己控制Timer_Queue的尺寸。原因如下。默认的ACE的Timer_Queue初始化的尺寸不大,一般只有44个。而原有的尺寸不能满足你的要求的时候,Timer_Queue会自动增长,以Timer_Heap为例,增长的方式是扩大一倍空间。在性能要求严格环境下,多次增长队列的尺寸对性能会造成一定的冲

2008-09-12 03:38:00 2136

原创 共享内存的与位置无关分配?

18         共享内存的与位置无关分配?在文档《ACE Programmers Guide, The: Practical Design Patterns for Network and Systems Programming》中介绍了一种与位置无关的共享内存分配,但是实际上这种方式并不是太理想。按照文章中的介绍的方式,其实主要是采用ALWAYS_FIXED参数,使用制定的基地址作为

2008-09-12 03:33:00 2373

原创 过于前卫的Makefile方式

 17         过于前卫的Makefile方式这个”陷阱”的说法有点吹毛求疵,ACE提供了一种很前卫的Makefile方式,他定义了Makefile的基础变量,以及包括规则。如果使用他来辅助Makefile的书写,特别是在跨平台开发中,你可以大大节省Makefile开发时间。BIN   = hello_aceBUILD = $(VBIN)SRC = $(addsuf

2008-09-12 03:31:00 2765

原创 非阻塞网络函数封装不一致

 16         非阻塞网络函数封装不一致ACE的非阻塞网络函数参数设计有不合理的地方。ACE_SOCK_Stream和ACE_SOCK_Connector在非阻塞的的调用的接口对于ACE_Time_Value *timeout参数的使用不一致,一个要使用NULL,一个却要使用ACE_Time_Value::zero。ACE_SOCK_Stream,非阻塞调用send函数的时候【

2008-09-12 03:29:00 3002 7

原创 ACE_Time_Value的赋值效率

 15         ACE_Time_Value的赋值效率ACE_Time_Value是使用ACE会大量使用类。但是他的部分函数没有高效的实现。比如构造函数:ACE_INLINEACE_Time_Value::ACE_Time_Value (time_t sec, suseconds_t usec)和set函数ACE_INLINE voidACE_Time_

2008-09-12 03:27:00 5212

原创 ACE的日志的不如意

  14         ACE的日志的不如意ACE的日志部分是一个非常漂亮的实现,在多线程和多进程模型下都能较好的效率和安全使用。但是却又少量的不足,让人意犹未尽。14.1           无法替换的时间戳格式ACE日志对于时间戳的格式是固定的,采用的是格式,这个格式在西方人看起来估计还比较顺眼,在东方人眼中却不如人意。更好的方式当然是时间戳的函数可以重载。或者用函数对象(指

2008-09-12 03:25:00 1900

原创 尽量使用STL而不是ACE的容器

 13         尽量使用STL而不是ACE的容器这个纯属个人感觉(偏见)。我有如下理由不使用ACE的容器:l      一些实现不符合大家对于容器的认识,比如ACE_DLList,在其中存放的居然是对象的指针而不是拷贝。你还必须记住去释放ACE_DLList内部管理的指针。l      ACE容器的迭代器不符合STL的要求,从而造成ACE的容器无法使用STL的各种模板算法和

2008-09-12 03:25:00 2175 1

原创 ACE的CDR中的字节对齐问题

 12         ACE的CDR中的字节对齐问题大家应该都知道计算机中间都有字节对齐问题。CPU访问内存的时候,如果从特定的地址开始访问一般可以加快速度,比如在32位机器上,如果一个32位的整数被放在能被32模除等于0的地址上,只需要访问一次,而如果不在,可能要访问两次。但是这样就要求一些数据从特定的地址开始,而不是顺序排放(中间会有一些空余的地址),这就是字节对齐。而ACE C

2008-09-12 03:23:00 2971 1

原创 调整系统时钟导致ACE定时器丢失

11         调整系统时钟导致ACE定时器丢失由于我们采用的服务器一般都是靠纽扣电池作为能源驱动和记录时钟,一般在运行一段时间后都会出现时间误差。所以很多大规模的分布系统都有校时操作,特别是一些对时钟要求精确的分布式系统(比如计费等),往往都会有一个主机提供精确时钟服务(其可能采用GPS校时),其他服务器通过这台服务器校时,校时操作一般都是直接改变系统时钟。ACE的定时器都是采用E

2008-09-12 03:15:00 2795

原创 Event_Handler在程序退出前应该自己关闭

10         Event_Handler在程序退出前应该自己关闭在程序退出的【注】,我们往往不会自己关闭Event_Handler,而寄希望Reactor 的清理。但是实际情况会复杂很多。使用的时候必须当心。 【注】是否要在退出的时候清理所有分配的内存?在普通的操作系统中,程序的退出会回收所有的分配内存。所以很多人会逃避在最后阶段的清理分配的内存。但是这实在不是一个良好

2008-09-12 03:12:00 2966 2

原创 ACE_Dev_Poll_Reactor的处理优先级严重偏向定时器

  9            ACE_Dev_Poll_Reactor的处理优先级严重偏向定时器不使用POLL和EPOLL【注】的人,估计不太知道这个ACE_Dev_Poll_Reactor,但实际上。特别是Linux下的EPOLL(一个IO多路服用模型),这是Linux大规模接入的重要法宝,从目前的表现来看,其他平台上还没有可以超越EPOLL的东西,Windows下的异步IO的性能也还远

2008-09-08 23:25:00 2547

原创 慎用Reactor Notify机制

  8               慎用Reactor Notify机制在Reactor的模式,有一种辅助的通知机制,Notify机制,简单说就是通过通知发起者调用notify函数,notify的消息被保存在一个管道中,handle_event的处理中会检查这个管道中是否有通知数据,如果有就根据通知的消息,会根据默认的通知消息的类型去调用hanle_input等函数。从设计的角度将,这

2008-09-08 23:23:00 4049 2

原创 注意ACE_Pipe的实现

 7               注意ACE_Pipe的实现ACE_Pipe是一个跨平台的管道实现。标准情况来讲,采用的实现,但是在最大的两个平台Windows和Linux上,ACE的实现是采用的Socket实现。intACE_Pipe::open (int buffer_size){  ACE_TRACE ("ACE_Pipe::open"); #if def

2008-09-08 23:21:00 2613

原创 尽量使用ID取消ACE_Event_Handler定时器

 6           尽量使用ID取消ACE_Event_Handler定时器ACE的Reactor 提供了两种方式取消定时器:virtual int cancel_timer (ACE_Event_Handler *event_handler,                            int dont_call_handle_close = 1);vir

2008-09-08 23:19:00 2482

原创 WFMO_Reactor的与众不同

  5              WFMO_Reactor的与众不同WFMO_Reactor是ACE_Reactor在Windows下的默认实现(为什么不选择ACE_Select_Reactor作为默认实现,可能是基于效率和强大性的考虑),WFMO_Reactor的低层使用的函数是WaitForMultipleObjects和WSAEventSelect,WSAEnumNetworkEve

2008-09-08 23:18:00 1444

原创 Reactor定时器的精度取决于实现

4              Reactor定时器的精度取决于实现由于Reactor在各个平台的默认实现都取决于平台的实现,比如在Windows下默认的Reactor是WFMO_REACTOR,而在Linux和UNIX平台,默认的Reactor是Select_Reactor,而Reactor的实现往往取决于使用的反应器底层实现,而这些反应器的时间精度就决定了你的定时器的时间精度。下表大致反馈了

2008-09-08 23:11:00 1434

原创 不要使用ACE_Timer_Hash

 1               不要使用ACE_Timer_HashACE有一个非常优美的定时器队列模型,他提供了4种定时器Queue让大家使用:ACE_Timer_Heap,ACE_Timer_Wheel,ACE_High_Res_Timer,ACE_Timer_Hash。在《C++ Network Programming Volume 2 - Systematic Reuse wit

2008-09-08 23:09:00 2133

原创 ACE的链接Link错误

2           ACE的链接Link错误很多人在Windows使用ACE的时候往往会出现以下的Link错误。Why do I get errors while using TryEnterCriticalSection? /ace/OS.i(2384) : error C2039:TryEnterCriticalSection: is not a member of

2008-09-08 23:08:00 2254 1

原创 ACE的陷阱

 ACE的陷阱坦白说,使用这个标题无非是希望能够吸引你的眼球,这篇文章的目的仅仅是为了揭示一些ACE缺陷的。文章适合的读者是对ACE(ADAPTIVE Communication Environment)有一定研究,或者正在使用ACE从事项目开发的人士参考。如果你对C++还是新手,甚至包括ACE知识初学者,(但你想飞的更高),建议你收藏这篇文档以后阅读。秉承陷阱系列文章的传统,我只是通

2008-09-08 23:05:00 1762

且将新火试新茶-MySQL Benchmark

《且将新火试新茶-MySQL Benchmark》,在Blog的文档由于格式原因不是特别理想,将文档转换为PDF格式提交上来给大家,希望大家喜欢。 使用下载资源分出于无奈,我自己的下载分不多。呵呵。 我的Blog是: http://blog.csdn.net/fullsail 大家可以自由的转载使用这个文档,前提只是保证文档的完整性,我保留署名权。

2009-03-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除