MeVisLab Toolbox Reference
AsynchronousIO


Introduction

Asynchronous programming enables the parallelization of tasks on a different level. This is different from explicit multithreading where two threads work on the same kind of problem. Asynchronous programs can be single-threaded although there is work which is done simultaneously. One task could be an I/O operation which is controlled by the operating system and the other is an interactive graphical user interface. Completion events then call back into the application code where they are handled. Multithreading can be seen as another enabler next to asynchronous OS system calls.

This project has the following aims:

  • Convenient support for asynchronous low level networking operations including transport layer security (TLS)
  • Definition of abstract interfaces for input and output channels
  • Class templates facilitating the creation of I/O processors using these interfaces
  • Class templates facilitating the connection between I/O processors using specific execution policies
  • Turnkey ready implementation for synchronous and asynchronous execution policies

The project defines the namespace asio.

While the unit test project AsynchronousIOTests gives a good introduction on how these classes are used, there is also the dependent library MLAsynchronousIO which defines MeVisLab modules for most of the functionality.

Acknowledgements

This library is heavily based on Boost.Asio. A big thanks to Christopher Kohlhoff who is jointly responsible for making C++ more modern again.

A core part of this library makes use of Boost.Signals2. A big thanks to its creators Douglas Gregor and Frank Mori Hess for their work.

Parts of this library make use of Boost.Optional. Also a big thanks to its creators Fernando Luis Cacciola Carballal and Andrzej KrzemieĊ„ski.