X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/60723cc9062e7d1ef8216d1e85d90892603e0df6..67ebba4175baedb772c36affafe342fed64154ee:/docs/source/app_s4u.rst diff --git a/docs/source/app_s4u.rst b/docs/source/app_s4u.rst index dd610a0a45..f386d13bec 100644 --- a/docs/source/app_s4u.rst +++ b/docs/source/app_s4u.rst @@ -1,5 +1,6 @@ .. _S4U_doc: +================= The S4U Interface ================= @@ -20,6 +21,7 @@ with the full power of C++. This is the prefered interface to describe abstract algorithms in the domains of Cloud, P2P, HPC, IoT and similar settings. +------------- Main Concepts ------------- @@ -129,3 +131,79 @@ functions to simplify the code of actors. .. |Mutex| replace:: **Mutex** .. _Mutex: api/classsimgrid_1_1s4u_1_1Mutex.html + +---------- +Activities +---------- + +Activities represent the actions that consumes a resource, such as +:ref:`s4u::Comm ` that +consumes the *transmiting power* of :ref:`s4u::Link +` resources. + +....................... +Asynchronous Activities +....................... + +Every activity can be either **blocking** or **asynchronous**. For +example, :cpp:func:`s4u::Mailbox::put() ` +and :cpp:func:`s4u::Mailbox::get() ` +create blocking communications: the actor is blocked until the +completion of that communication. Asynchronous communications do not +block the actor during their execution but progress on their own. + +Once your asynchronous activity is started, you can test for +completion using :cpp:func:`s4u::Activity::test() `. +This function returns ``true`` if the activity completed already. +You can also use :cpp:func:`s4u::Activity::wait() ` +to block until the completion of the activity. To wait at most for a given period, +use :cpp:func:`s4u::Activity::wait_for() `. +Finally, to wait at most until a specified time limit, use +:cpp:func:`s4u::Activity::wait_until() `. + +.. todo:: + + wait_for and wait_until are currently not implemented for Exec and Io activities. + +Every kind of activities can be asynchronous: + + - :ref:`s4u::CommPtr ` are created with + :cpp:func:`s4u::Mailbox::put_async() ` and + :cpp:func:`s4u::Mailbox::get_async() `. + - :ref:`s4u::IoPtr ` are created with + :cpp:func:`s4u::Storage::read_async() ` and + :cpp:func:`s4u::Storage::write_async() `. + - :ref:`s4u::ExecPtr ` are created with + :cpp:func:`s4u::Host::exec_async() `. + - In the future, it will become possible to have asynchronous IPC + such as asynchronous mutex lock requests. + +The following example shows how to have several concurrent +communications ongoing. First, you have to declare a vector in which +we will store the ongoing communications. It is also useful to have a +vector of mailboxes. + +.. literalinclude:: ../../examples/s4u/async-waitall/s4u-async-waitall.cpp + :language: c++ + :start-after: init-begin + :end-before: init-end + :dedent: 4 + +You then start all communications that should occur concurrently with +:cpp:func:`s4u::Mailbox::put_async() `. +Finally, the actor waits for the completion of all of them at once +with +:cpp:func:`s4u::Comm::wait_all() `. + +.. literalinclude:: ../../examples/s4u/async-waitall/s4u-async-waitall.cpp + :language: c++ + :start-after: send-begin + :end-before: send-end + :dedent: 4 + + +..................... +Activities Life cycle +..................... + +Sometimes, you want to change the setting of an activity before it even starts.