diff options
| author | Garrett D'Amore <garrett@damore.org> | 2024-03-30 20:44:29 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2024-03-30 20:44:29 -0700 |
| commit | 0974ccc48f80ed4cf29ace7255341c2c1284f448 (patch) | |
| tree | 1329f7c181fe1461af0b4b53e42f154120ead3b0 /docs/reference/src/aio/index.md | |
| parent | 548ab684fa83f3098dea4e7ce09d3f4f1bdb7358 (diff) | |
| download | nng-0974ccc48f80ed4cf29ace7255341c2c1284f448.tar.gz nng-0974ccc48f80ed4cf29ace7255341c2c1284f448.tar.bz2 nng-0974ccc48f80ed4cf29ace7255341c2c1284f448.zip | |
Aio moved
Diffstat (limited to 'docs/reference/src/aio/index.md')
| -rw-r--r-- | docs/reference/src/aio/index.md | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/docs/reference/src/aio/index.md b/docs/reference/src/aio/index.md new file mode 100644 index 00000000..665a91e3 --- /dev/null +++ b/docs/reference/src/aio/index.md @@ -0,0 +1,76 @@ +# Aysnchronous I/O + +_NNG_ provides rich support for {{i:asynchronous I/O}}. +This allows applications to achieve high levels of concurrency with a +minimum of fuss, optimized for the platform. + +Asynchronous I/O is performed without blocking calling application +threads, so they may continue to perform other work. + +## AIO Handles + +Applications create an `nng_aio` object with a function to call when +the operation is done (along with a pointer to application private data), +then submit the operation. + +These `nng_aio` objects are created using the [`nng_aio_alloc()`][nng_aio_alloc], +and destroyed using [`nng_aio_free()`][nng_aio_free]. + +The `nng_aio` object itself is declared like this: + +```c +#include <nng/nng.h> + +typedef struct nng_aio nng_aio; +``` + +Every asynchronous operation uses its own instance an `nng_aio`, and each +`nng_aio` can only be used with a single operation at a time. + +> [!IMPORTANT] +> Attempting to submit an operation using an `nng_aio` that is already +> in use for another operation will crash the application. +> However, it is possible to submit another operation on the `nng_aio` from +> the callback associated with the same `nng_aio`. + +When the operation is complete, whether successfully +or otherwise, the callback function is executed. +The callback will be executed exactly once. + +## Cancellation + +The asynchronous I/O framework also supports cancellation of +operations that are already in progress +(see [`nng_aio_cancel()`][nng_aio_cancel]), as well setting a maximum +timeout for them to complete within +(see [`nng_aio_set_timeout()`][nng_aio_set_timeout]). + +## Waiting for Completion + +It is also possible to initiate an asynchronous operation, and wait for it to +complete [`nng_aio_wait()`][nng_aio_wait]. + +> [!IMPORTANT] +> Applications must never call [`nng_aio_wait()`][nng_aio_wait] or +> [`nng_aio_stop()`][nng_aio_stop] from a callback registered to +> an `nng_aio` object. Doing so can lead to a deadlock. + +## See Also + +[nng_aio_abort][nng_aio_abort], +[nng_aio_alloc][nng_aio_alloc], +[nng_aio_cancel][nng_aio_cancel], +[nng_aio_count][nng_aio_count], +[nng_aio_free][nng_aio_free], +[nng_aio_get_input][nng_aio_get_input], +[nng_aio_get_msg][nng_aio_get_msg], +[nng_aio_get_output][nng_aio_get_output], +[nng_aio_result][nng_aio_result], +[nng_aio_set_input][nng_aio_set_input], +[nng_aio_set_iov][nng_aio_set_iov], +[nng_aio_set_msg][nng_aio_set_msg], +[nng_aio_set_timeout][nng_aio_set_timeout], +[nng_aio_stop][nng_aio_stop], +[nng_aio_wait][nng_aio_wait] + +{{#include ../refs.md}} |
