大多数程序都会以某种方式与外部世界进行交互,无论是通过文件、网络、串行端口还是控制台。有时,例如在网络通信中,单个 I/O 操作可能需要很长时间才能完成。这给应用程序开发带来了特殊的挑战。
Boost.Asio 提供了管理这些耗时操作的工具,而无需程序使用基于线程和显式锁定的并发模型。
Boost.Asio 库面向使用 C++ 进行系统编程的程序员,他们通常需要访问网络等操作系统功能。特别是,Boost.Asio 解决了以下目标:
-
可移植性。 该库应支持一系列常用的操作系统,并在这些操作系统上提供一致的行为。
-
可扩展性。 该库应有助于开发能够扩展到数千个并发连接的网络应用程序。每个操作系统的库实现应使用最能实现这种可扩展性的机制。
-
效率。 该库应支持散布/收集 I/O 等技术,并允许程序最小化数据复制。
-
借鉴成熟 API(如 BSD 套接字)的模型概念。 BSD 套接字 API 已得到广泛实现和理解,并且在大量文献中有介绍。其他编程语言通常在网络 API 中使用类似的接口。在合理范围内,Boost.Asio 应借鉴现有实践。
-
易用性。 该库应采用工具包而非框架的方法,从而降低新用户的入门门槛。也就是说,它应尽量减少在时间上的前期投入,只需学习一些基本规则和指南。之后,库用户只需理解正在使用的特定函数即可。
-
作为进一步抽象的基础。 该库应允许开发提供更高级别抽象的其他库。例如,HTTP 等常用协议的实现。
尽管 Boost.Asio 最初主要专注于网络,但其异步 I/O 的概念已扩展到包括其他操作系统资源,如串行端口、文件描述符等。