翻译:Boost.Asio基础剖析

 

Basic Boost.Asio Anatomy
Boost.Asio基础剖析

Boost.Asio may be used to perform both synchronous and asynchronous operations on I/O objects such as sockets. Before using Boost.Asio it may be useful to get a conceptual picture of the various parts of Boost.Asio, your program, and how they work together.

Boost.Asio可用于在诸如socket对象上执行同步和异步操作。在使用Boost.Asio之前,了解一下Boost.Asio和你的程序的各个部分的概念图,以及它们如何一起工作,是非常有用的,

As an introductory example, let's consider what happens when you perform a connect operation on a socket. We shall start by examining synchronous operations.

作为一个入门例子,让我们了解一下,当你在执行一个socket连接时,发生了什么情况。这里我们将开始研究同步操作。

sync_op

Your program will have at least one io_service object. The io_service represents your program's link to the operating system's I/O services.

你的程序将至少有一个 io_service 对象,这个 io_service代表了你的程序到操作系统的

I/O服务的连接。

boost::asio::io_service io_service;

To perform I/O operations your program will need an I/O object such as a TCP socket:

为了执行I/O操作,你的程序需要一个 I/O对象,如TCP socket:

boost::asio::ip::tcp::socket socket(io_service);

When a synchronous connect operation is performed, the following sequence of events occurs:

当异步连接操作执行时,下列事件顺次发生:

1.        Your program initiates the connect operation by calling the I/O object:

你的程序通过调用 I/O对象初始化连接操作,

socket.connect(server_endpoint);

2. The I/O object forwards the request to the io_service.

I/O转发请求到io_service.

3. The io_service calls on the operating system to perform the connect operation.

io_service调用操作系统执行连接操作

4. The operating system returns the result of the operation to the io_service.

操作系统返回操作结果给 io_service

5. The io_service translates any error resulting from the operation into a  boost::system::error_code. An error_code may be compared with specific values, or tested as a boolean (where a false result means that no error occurred). The result is then forwarded back up to the I/O object.

 io_service将任何错误代码转换为boost::system::error_code,这个error_code可以和特定值比较,也可作为boolean测试(false表示没有错误发生)。结果然后转发回 I/O对象

6. The I/O object throws an exception of type boost::system::system_error if the operation failed. If the code to initiate the operation had instead been written as:

如果操作失败, I/O对象抛出boost::system::system_error类型的异常。如果初始化操作的代码按下面的方式书写:

boost::system::error_code ec;
socket.connect(server_endpoint, ec);

then the error_code variable ec would be set to the result of the operation, and no exception would be thrown.

那么 error_code 变量 ec将被设置为操作的结果,并且没有异常抛出。

When an asynchronous operation is used, a different sequence of events occurs.

当使用异步操作时,将是不同的事件产生顺序

async_op1

1.        Your program initiates the connect operation by calling the I/O object:

你的程序通过调用I/O对象初始化连接操作

socket.async_connect(server_endpoint, your_completion_handler);

where your_completion_handler is a function or function object with the signature:

这里your_completion_handler是一个带有signature (目标识别特征)的函数或函数对象:

void your_completion_handler(const boost::system::error_code& ec);

The exact signature required depends on the asynchronous operation being performed. The reference documentation indicates the appropriate form for each operation.

确切的signature (目标识别特征)根据执行的异步操作的不同而不同,参考文档为每个操作列出了正确的形式。

2.        The I/O object forwards the request to the io_service.

 I/O对象将请求转发给io_service

3.        The io_service signals to the operating system that it should start an asynchronous connect.

io_service通知操作系统,告诉操作系统启动一个异步连接

Time passes. (In the synchronous case this wait would have been contained entirely within the duration of the connect operation.)

过一段时间。(在同步操作的情况下,这个等待是整个连接操作的时间)

async_op2

4. The operating system indicates that the connect operation has completed by placing the result on a queue, ready to be picked up by the io_service.

操作系统通过在队列里放置一个结果来指示连接操作已经完成,这个结果等待io_service来取。

5. Your program must make a call to io_service::run() (or to one of the similar io_service member functions) in order for the result to be retrieved. A call toio_service::run() blocks while there are unfinished asynchronous operations, so you would typically call it as soon as you have started your first asynchronous operation.

为了确保结果能够被收到,你的程序必须调用io_service::run()(或相似的io_service成员函数)。当有未完成的操作时,io_service::run()的调用被阻塞,所以你要在第一次启动异步操作后尽快调用io_service::run()

6. While inside the call to io_service::run(), the io_service dequeues the result of the operation, translates it into an error_code, and then passes it to your completion handler.

io_service::run()内部, io_service 从队列移除操作结果,转换为 error_code,并传递给your completion handler

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.zip深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值