c++ - 什么是 asio::io_service?
问题描述
我正在研究异步 I/O。我知道 select()、poll() 和 epoll()。我很好奇的是使用 boost::asio 时的异步 I/O。作为调查的结果,使用了io_service。select()、poll() 和 epoll 中的哪一个?
解决方案
asio::io_service 已过时。
在较新的 boost 版本中,它被 asio::io_context 取代。
io_context (formly io_service) 主要目的是对 asio 库中的对象执行异步操作,例如。套接字,接受器等,根据文档:
... I/O 对象上的同步操作隐式运行 io_context 对象以进行单个操作。io_context 必须调用 io_context 函数 run()、run_one()、run_for()、run_until()、poll() 或 poll_one() 才能代表 C++ 程序执行异步操作。异步操作已完成的通知是通过调用关联的处理程序来传递的。处理程序仅由当前正在调用 io_context... 的 run()、run_one()、run_for()、run_until()、poll() 或 poll_one() 的任何重载的线程调用。
基本上,您将要执行的任务发送到 io_context(async_... 函数),并且 io_context 负责执行这些任务(可能在线程或线程池上)并调用提供的回调(=handler)。
它通常在内部使用某些版本的任务窃取来在线程池中的线程上进行有效的任务分配。
推荐阅读
- python - Python正则表达式从字符串中获取所有图像src'
- rest - 如何使用jmeter发送多个json正文?
- python - 如何每 10 秒将数据写入文件
- php - 亚马逊通过使用 API PHP/jQuery 搜索 ASIN 获取商品详情
- javascript - 在 React Native 中的 FlatList 中延迟加载项目?
- java - Java中的版本比较
- regex - 基于缩进文本匹配的正则表达式前瞻
- git - Github - 合并被阻止 - 基础分支要求对所有提交进行签名
- ios - 推广的应用内购买未显示在应用商店中
- java - 为什么静态块不能访问它之后定义的静态变量