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