大部分的而程序都会与外部世界进行交互,无论是通过文件、网络、串行电缆,还是通过控制台。有时,比如在网络编程时,独立的I/O操作发起后,可能会需要很久才能完成。这给应用程序的开发带来了特定的挑战性。
Boost.Asio 是一个跨平台的现代C++库,它提供给开发者一个通用的异步模型,用于处理网络传输或低层的I/O操作。
简介
Boost.Asio提供了许多工具来帮助完成这些耗时操作,而且避免使用基于线程和显示锁的并发模型,简化了程序的设计和编写。Boost.Asio库的适用对象主要是使用C++进行系统编程的程序员,系统编程这类工作对操作系统功能(如网络功能)的使用非常频繁。
具体来说,Boost.Asio的希望达到的目标如下:
- 移植性。支持现有的大部分操作系统,提供统一的接口。
- 伸缩性。支持海量并发连接的网络应用开发,利用不同操作系统的不同机制来实现最高的性能。
- 高效。支持离散聚合I/O操作,允许程序最小化数据拷贝。
- 适配现有的API,如BSD套接字。BSD套接字API在实际工作中被广泛使用,并且有许多介绍文档。其他的程序语言也会使用相似的接口来实现网络API。
- 便于使用。与其提供一整套框架,程序库为新的用户提供了一套非常容易入门的工具集。尽可能减少使用者在前期投入的时间,在学习了一些简单的规则和指导后,使用者只需要理解他们需要的特定函数便可以实现特定的工作。
- 支持更高层的抽象。支持更高抽象层次的开发。比如实现一个HTTP协议。
尽管Boost.Asio被设计为处理网络编程,但是它异步操作的理念也可以适用于如端口,文件描述子等等其他操作系统资源。
Hello World!
让我们从一个简单的定时器开始。
1 | // Wait a timer asynchronously. |