1. ACE学习综述

1.1. ACE项目的优点

  • 可以跨平台使用,基本上可以实现一次编写,多平台运行。
  • ACE本身不仅仅是一个简单的网络框架,对于网络框架涉及到的进程管理、线程管理等系统本身相关的内容也进行了统一的封装,甚至消息队列和内存管理等也都有统一封装。
  • 代码的质量还是比较高,能经得起长时间运行的考验。
  • 代码经过层层封装和模板通用性封装,仍然能够保持较高的性能。

1.2. ACE项目的缺点

  • ACE的前身是 《Unix网络编程》,该书页数达上千页,包括了各种网络开发的细节、移植扩展和网络开发架构模式,这就要求使用ACE开发网络的人必须具备了较丰富的网络开发经验。
  • ACE的代码已经比较庞大,且每个版本都有新功能加入,但是相关文档更新不及时。三本开发编程的书也都定位与基本的功能,想深入了解就必须从大量代码中选择代码阅读。
  • 由于ACE定位是跨平台开发,各个开发平台上的网络实现和数据结构各不相同,因为代码中充斥了大量的宏来区分,对于阅读代码造成了一定的障碍。
  • 学术性较强,设计模式与模板使用相对密集。阅读代码前需要先学习 POSA2 的图书。
  • ACE的类继承关系略显负责,层次较多,不利于学习和分析。

1.3. Reactor使用过程中的注意事项

  • 相对时间和绝对时间使用,相对超时时间常常用于这样的情况:操作可能会在能够继续执行之前迟滞,但只会被调用一次。 绝对时间常常被用于这样的情况:操作可能会通过循环多次调用。绝对时间的使用使得无需每次循环重新计算超时值。 具体可参考 《C++ 网络编程卷二》 中文 P45,副栏6。
  • handle_*() 函数(Reactor会忽略handle_close的返回值)的返回值,决定着Reactor后续对相关MASK的处理。 == 0 正常处理 > 0 Reactor继续为此事件检测和分配已经登记的时间。 == -1 Reactor应停止对时间处理器已经登记的MASK。 如何跟踪已经注册的事件,则可参考 《C++ 网络编程卷二》 P51, 副栏 10。
  • 对于事件处理器的资源释放集中在其 handle_close 函数中进行。如果为动态分配的对象,可以在关闭所有资源后调用 delete this。
  • reactor->remove_handler(eh,mask),如果没有设置 ACE_Event_Handler::DONT_CALL 标志,会调用该 mask 的 handle_close 函数,因此如果在 handle_close 函数中调用 remove_handler 函数,需要添加ACE_Event_Handler::DONT_CALL 标志,避免 handle_close 的递归调用。

ACE学习综述(1)的更多相关文章

  1. (转) 深度强化学习综述:从AlphaGo背后的力量到学习资源分享(附论文)

    本文转自:http://mp.weixin.qq.com/s/aAHbybdbs_GtY8OyU6h5WA 专题 | 深度强化学习综述:从AlphaGo背后的力量到学习资源分享(附论文) 原创 201 ...

  2. 论文笔记:多标签学习综述(A review on multi-label learning algorithms)

    2014 TKDE(IEEE Transactions on Knowledge and Data Engineering) 张敏灵,周志华 简单介绍 传统监督学习主要是单标签学习,而现实生活中目标样 ...

  3. 深度学习综述(LeCun、Bengio和Hinton)

    原文摘要:深度学习可以让那些拥有多个处理层的计算模型来学习具有多层次抽象的数据的表示.这些方法在很多方面都带来了显著的改善,包含最先进的语音识别.视觉对象识别.对象检測和很多其他领域,比如药物发现和基 ...

  4. 2020国防科大综述:3D点云深度学习——综述(3D点云分割部分)

    目录 摘要 1.引言: 2.背景 2.1 数据集 2.2评价指标 3.3D点云分割 3.1 3D语义分割 3.1.1 基于投影的方法 多视图表示 球形表示 3.1.2 基于离散的方法 稠密离散表示 稀 ...

  5. 2020国防科大综述:3D点云深度学习—综述(点云形状识别部分)

    目录 摘要 1.引言: 2.背景 2.1 数据集 2.2评价指标 3.3D形状分类 3.1基于多视图的方法 3.2基于体素的方法 3.3基于点的方法 3.3.1 点对多层感知机方法 3.3.2基于卷积 ...

  6. Generalizing from a Few Examples: A Survey on Few-Shot Learning(从几个例子总结经验:少样本学习综述)

    摘要:人工智能在数据密集型应用中取得了成功,但它缺乏从有限的示例中学习的能力.为了解决这一问题,提出了少镜头学习(FSL).利用先验知识,可以快速地从有限监督经验的新任务中归纳出来.为了全面了解FSL ...

  7. 小样本元学习综述:A Concise Review of Recent Few-shot Meta-learning Methods

    原文链接 小样本学习与智能前沿 . 在这个公众号后台回复'CRR-FMM',即可获得电子资源. 1 Introduction In this short communication, we prese ...

  8. 最新小样本学习综述 A Survey on Few-Shot Learning | 四大模型Multitask Learning、Embedding Learning、External Memory…

    目录 原文链接: 小样本学习与智能前沿 01 Multitask Learning 01.1 Parameter Sharing 01.2 Parameter Tying. 02 Embedding ...

  9. ACE学习简单记录

    一.ACE_Reactor的使用方法 1.创建ACE_Event_Handler的派生类. class MyHandler : public ACE_Event_Handler { public: M ...

随机推荐

  1. euclidean loss

    个人感觉相当于L2范式开平方,也相当于针对两个向量的欧氏距离开平方 说的更直白点就是两个向量对应位置相减得到每个位置的差,然后把每个位置的差开平方再相加 前向传播cpp代码: template < ...

  2. mysql(安装、启动、删除)服务

    必须在管理身份下运行 方式一: 安装服务 将 MySQL 安装为服务的方式: "C:\Program Files\MariaDB 10.3\bin\mysqld.exe" inst ...

  3. Zookeeper watch参照表

    Watcher 设置是开发中最常见的,需要搞清楚watcher的一些基本特征,对于exists.getdata.getchild对于节点的不同操 作会收到不同的 watcher信息.对父节点的变更以及 ...

  4. Java 加密Excel文件(打开时需输入密码)

    收集:author: lifq package com.XXX.XXX.utils; import java.io.IOException; import com.jxcell.CellExcepti ...

  5. Django-rest-framework(四)router

    在上一节viewsets中,我们提到了route的方式使用,在这一节,我们将仔细介绍drf 的router机制.简单来说,router的作用就是将viewset对象的url映射关系提取出来. 简单使用 ...

  6. ORA-12154/ORA-12560 可以尝试的解决办法

    WIN10  本机安装ORACLE数据库和ORACLE客户端后,使用PL/SQL 登陆提示错误ORA-12154 和ORACLE-12560, 在检查了本机的注册表.环境PATH路径.tnsnames ...

  7. 序列(Sequence)创建、使用、修改和删除

    序列(Sequence)是用来生成连续的整数数据的对象.序列常常用来作为主键中增长列,序列中的可以升序生成,也可以降序生成. 语法结构:创建序列 CREATE SEQUENCE sequence_na ...

  8. Lucene的原理和应用

    随着互联网的迅速普及与发展,网络舆论对社会生活的影响力越来越大, 网络口碑研究也逐渐形成一个新兴行业.有效的网络口碑研究,需要全方位地倾听网民的声音. 信息检索技术的应用,有效地提高了网络口碑研究的工 ...

  9. 19-2-28Python的了解以及变量、常量、数据类型、if语句的结构

    Python目前有两个大版本,一个是2.x版本,一个是3.x版本. Python2x:源码冗余,混乱:且默认ASCII码,只能识别英文字母数字. Python3x:源码整合,美观,清晰,简单.默认ut ...

  10. 爬虫——Handler处理器 和 自定义Opener

    我们之前一直都在使用的urlopen,这是一个特殊的opener(也就是模块帮我们构建好的). 但是基本的urlopen()方法不支持代理.cookie等其他的HTTP/HTTPS高级功能.所以要支持 ...