X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f22a365751c586e7d4d9836824730685a30a485c..1cce0801abcad7c884f9e72ceda87e36d6635104:/include/simgrid/s4u/actor.hpp diff --git a/include/simgrid/s4u/actor.hpp b/include/simgrid/s4u/actor.hpp index 680bcd6d7d..4f3a1a9f5d 100644 --- a/include/simgrid/s4u/actor.hpp +++ b/include/simgrid/s4u/actor.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2006-2015. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2006-2016. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -6,55 +6,219 @@ #ifndef SIMGRID_S4U_ACTOR_HPP #define SIMGRID_S4U_ACTOR_HPP +#include +#include +#include +#include +#include + #include +#include + #include #include namespace simgrid { namespace s4u { -/** @brief Simulation Agent - * - * An actor may be defined as a code executing in a location (host). - * - * All actors should be started from the XML deployment file (using the @link{s4u::Engine::loadDeployment()}), - * even if you can also start new actors directly. - * Separating the deployment in the XML from the logic in the code is a good habit as it makes your simulation easier - * to adapt to new settings. +/** @ingroup s4u_api + * + * An actor is an independent stream of execution in your distributed application. * - * The code that you define for a given actor should be placed in the main method that is virtual. - * For example, a Worker actor should be declared as follows: - * - * \verbatim + * You can think of an actor as a process in your distributed application, or as a thread in a multithreaded program. + * This is the only component in SimGrid that actually does something on its own, executing its own code. + * A resource will not get used if you don't schedule activities on them. This is the code of Actors that create and schedule these activities. + * + * An actor is located on a (simulated) host, but it can interact + * with the whole simulated platform. + * + * The s4u::Actor API is strongly inspired from the C++11 threads. + * The documentation + * of this standard may help to understand the philosophy of the S4U + * Actors. + * + * @section s4u_actor_def Defining the skeleton of an Actor + * + * %As in the C++11 + * standard, you can declare the code of your actor either as a + * pure function or as an object. It is very simple with functions: + * + * @code{.cpp} * #include "s4u/actor.hpp" - * - * class Worker : simgrid::s4u::Actor { - * - * int main(int argc, char **argv) { - * printf("Hello s4u"); - * } + * + * // Declare the code of your worker + * void worker() { + * printf("Hello s4u"); + * simgrid::s4u::this_actor::execute(5*1024*1024); // Get the worker executing a task of 5 MFlops * }; - * \endverbatim + * + * // From your main or from another actor, create your actor on the host Jupiter + * // The following line actually creates a new actor, even if there is no "new". + * Actor("Alice", simgrid::s4u::Host::by_name("Jupiter"), worker); + * @endcode + * + * But some people prefer to encapsulate their actors in classes and + * objects to save the actor state in a cleanly dedicated location. + * The syntax is slightly more complicated, but not much. + * + * @code{.cpp} + * #include "s4u/actor.hpp" + * + * // Declare the class representing your actors + * class Worker { + * public: + * void operator()() { // Two pairs of () because this defines the method called () + * printf("Hello s4u"); + * simgrid::s4u::this_actor::execute(5*1024*1024); // Get the worker executing a task of 5 MFlops + * } + * }; + * + * // From your main or from another actor, create your actor. Note the () after Worker + * Actor("Bob", simgrid::s4u::Host::by_name("Jupiter"), Worker()); + * @endcode + * + * @section s4u_actor_flesh Fleshing your actor + * + * The body of your actor can use the functions of the + * simgrid::s4u::this_actor namespace to interact with the world. + * This namespace contains the methods to start new activities + * (executions, communications, etc), and to get informations about + * the currently running thread (its location, etc). + * + * Please refer to the @link simgrid::s4u::this_actor full API @endlink. * + * + * @section s4u_actor_deploy Using a deployment file + * + * @warning This is currently not working with S4U. Sorry about that. + * + * The best practice is to use an external deployment file as + * follows, because it makes it easier to test your application in + * differing settings. Load this file with + * s4u::Engine::loadDeployment() before the simulation starts. + * Refer to the @ref deployment section for more information. + * + * @code{.xml} + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *