<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Dipartimento di Ingegneria dell'Informazione</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Università degli Studi di Parma Parma</institution>
          ,
          <country country="IT">Italy</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>- CoDE is an actor-based software framework aimed at both simplifying the development of large and distributed complex systems and guarantying an efficient execution of applications. This software framework takes advantage of a concise actor model that makes easy the development of the actor code by delegating the management of events (i.e., the reception of messages) to the execution environment. Moreover, it allows the development of scalable and efficient applications through the possibility of using different implementations of the components that drive the execution of actors. This paper introduces the software framework and shows how the performance of applications can be optimized by choosing the best combination among the alternative implementations of its components.</p>
      </abstract>
      <kwd-group>
        <kwd>- Actor model</kwd>
        <kwd>software framework</kwd>
        <kwd>concurrent programming</kwd>
        <kwd>distributed systems</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>INTRODUCTION</p>
      <p>
        Distributed and concurrent programming have lately
received enormous interest because multi-core processors make
concurrency an essential ingredient of efficient program
execution and because distributed architectures are inherently
concurrent. However, distributed and concurrent programming
is hard and largely different from sequential programming.
Programmers have more concerns when it comes to taming
parallelism. In fact distributed and concurrent programs are
usually bigger than equivalent sequential ones and models of
distributed and concurrent programming languages are
different from familiar and popular sequential languages
[
        <xref ref-type="bibr" rid="ref14">12</xref>
        ][
        <xref ref-type="bibr" rid="ref16">14</xref>
        ].
      </p>
      <p>
        Message passing models seem be the more appropriate
solution because they replace the sharing of data with the
exchange of messages. One of the well-known theoretical and
practical models of message passing is the actor model. Using
such a model, programs become collections of independent
active objects (actors) that exchange messages and have no
mutable shared state [1][
        <xref ref-type="bibr" rid="ref11">2</xref>
        ][9]. Actors can help developers to
avoid issues such as deadlock, live-lock and starvation, which
are common problems for shared memory based approaches.
There are a multitude of actor oriented libraries and languages,
and each of them implements some variants of actor semantics.
However, such libraries and languages use either thread-based
programming, which makes easy the development of programs,
or event-based programming, which is far more practical to
develop large and efficient concurrent systems, but also is more
difficult to use.
      </p>
      <p>This paper presents an actor based software framework,
called CoDE (Concurrent Development Environment), that has
the suitable features for both simplifying the development of
large and distributed complex systems and guarantying
scalable and efficient applications. The next two sections
introduce the software framework and its implementation.
Section 4 shows how the possibility of configuring an
application with different implementations of its components
allows coping with performance and scalability problems.
Section 5 introduces two simple applications and shows their
execution times obtained with different configurations. Section
6 introduces related work. Finally, section 7 concludes the
paper by discussing the main features of the software
framework and the directions for future work.</p>
      <p>II.</p>
    </sec>
    <sec id="sec-2">
      <title>CODE</title>
      <p>In CoDE a system is based on a set of interacting actors that
perform tasks concurrently. An actor is an autonomous
concurrent object, which interacts with other actors by
exchanging asynchronous messages. Communication between
actors is buffered: incoming messages are stored in a mailbox
until the actor is ready to process them. Each actor has a
system-wide unique identifier called its address that allows it to
be referenced in a location transparent way. An actor can send
messages only to the actors of which it knows the address, that
is, the actors it created and of which it received the addresses
from other actors. After its creation, an actor can change
several times its behavior until it kills itself. Each behavior has
the main duty of processing a set of specific messages through
a set of message handlers called cases. Therefore, if an
unexpected message arrives, then the actor mailbox maintains
it until a next behavior will be able to process it.</p>
    </sec>
    <sec id="sec-3">
      <title>An actor can perform five types of action:</title>
    </sec>
    <sec id="sec-4">
      <title>It can send messages to other actors or to itself.</title>
    </sec>
    <sec id="sec-5">
      <title>It can create new actors.</title>
    </sec>
    <sec id="sec-6">
      <title>It can update its local state.</title>
    </sec>
    <sec id="sec-7">
      <title>It can change its behavior.</title>
    </sec>
    <sec id="sec-8">
      <title>It can kill itself.</title>
      <p>In particular, an actor has not explicit actions for the
reception of messages, but its implementation autonomously
extracts the new messages from the actor mailbox and then
executes the actions for their processing.</p>
      <p>An actor can set a timeout for waiting for the next message
and then execute some actions if the timeout fires. However, it
has not explicit actions for monitoring the firing of such a
timeout: its implementation autonomously observes the firing
of the timeout and then executes the actions for its
management.</p>
      <p>Depending on the complexity of the application and on the
availability of computing and communication resources, one or
more actor spaces can manage the actors of the application. An
actor space acts as “container” for a set of actors and provides
them the services necessary for their execution. In particular,
an actor space takes advantages of two special actors: the
scheduler and the service provider. The scheduler manages the
concurrent execution of the actors of the actor space. The
service provider enables the actors of an application to perform
new kinds of action (e.g., to broadcast a message or to move
from an actor space to another one). Fig. 1 shows a graphical
representation of the architecture of a CoDE distributed
application.</p>
    </sec>
    <sec id="sec-9">
      <title>III. IMPLEMENTATION</title>
      <p>CoDE is a software environment implemented by using the
Java language and takes advantage of preexistent Java software
libraries and solutions for supporting concurrency and
distribution. CoDE has a layered architecture composed of an
application and a runtime layer. The application layer provides
the software components that an application developer needs to
extend or directly use for implementing the specific actors of
an application. The runtime layer provides the software
components that implement the CoDE middleware
infrastructures to support the development of standalone and
distributed applications.</p>
      <sec id="sec-9-1">
        <title>A. Actor Implementation</title>
        <p>
          An actor can be viewed as a logical thread that implements
an event loop [4][
          <xref ref-type="bibr" rid="ref15">13</xref>
          ]. This event loop perpetually processes
events that represent: the reception of messages, the behavior
exchanges and the firing of timeouts. In particular, an actor is
defined by five main components: a reference, a mailer, a
behavior, a state and an execution manager. Fig. 2 shows a
graphical representation of the architecture of an actor.
        </p>
        <p>A reference supports the sending of messages to the actor it
represents. Therefore, an actor needs to have the reference of
another actor for sending it a message. In particular, an actor
has have the reference of another actor if:</p>
        <p>It created such an actor (in fact, the creation method
returns the reference of the new actor).</p>
        <p>It received a message from such an actor (in fact, each
message contains the reference of the sender) or whose
content enclosed its reference.</p>
        <p>A reference has an attribute, called actor address, that
allows to distinguish itself (and then the actor it represents)
from the references of the other actors of the application where
it is acting. To guarantee it and to simplify the implementation,
an actor space acts as “container” for the actors running in the
same Java Virtual Machine (JVM) and an actor address is
composed of three components:</p>
        <p>An actor identifier that is different for all the actors of
the same actor space.</p>
        <p>An actor space identifier that is different for all the
actor spaces of the same computing node.</p>
      </sec>
    </sec>
    <sec id="sec-10">
      <title>The IP address of the computing node.</title>
      <p>A mailer provides a mailbox for the messages sent to its
actor until it processes them, and delivers its messages to the
other actors of the application. As introduced above, a behavior
can process a set of specific messages leaving in the mailbox
the messages that is not able to process. Such messages remain
into the mailbox until a new behavior is able to process them
and if there is not such a behavior they remain into the queue
for all the life of the actor. A mailbox has not an explicit limit
on the number of messages that can maintain. However, it is
clear that the (permanent) deposit of large numbers of
messages in the mailboxes of the actors may reduce the
performances of applications and cause in some circumstances
their failure.</p>
      <p>The original actor model associates a behavior with the task
of messages processing. In CoDE, a behavior can perform
three kinds of tasks: its initialization, the processing of
messages and the management of message reception timeouts.
In particular, a behavior does not directly process messages,
but it delegates the task to some case objects, that have the goal
of processing the messages that match a specific (and
unreplaceable) message pattern.</p>
      <p>Often the behaviors of an actor need to share some
information (e.g., a behavior may work on the results of the
previous behaviors). It is possible thank to a state object. Of
course, the kind of information that the behaviors of an actor
need to share depends on the type of tasks they must perform in
an application. Therefore, the state of an actor must be
specialized for the task it will perform.</p>
      <p>A message is an object that contains a set of fields
maintaining the typical header information and the message
content. Moreover, each message is different from any other
one. In fact, messages of the same sender have a different
identifier and messages of different senders have a different
sender reference.</p>
      <p>An actor has not direct access to the local state of the other
actors and can share data with them only through the exchange
of messages and through the creation of actors. Therefore, to
avoid the problems due to the concurrent access to mutable
data, both message passing and actor creation should have
callby-value semantics. This may require making a copy of the
data even on shared memory platforms, but, as it is done by the
large part of the actors libraries implemented in Java, CoDE
does not make data copies because such operations would be
the source of an important overhead. However, it encourages
the programmers to use immutable objects (by implementing as
immutable all the predefined message content objects) and
delegates the appropriate use of mutable object to them.</p>
      <p>As introduced above, an actor behavior processes the
received messages through a set of case objects and each of
them can process only the messages that match a specific
message pattern. In CoDE, a message pattern is an object that
can apply a combination of constraint objects on the value of
all the fields of a message and on the actor state. It improves
the adaptability of actors to the changes of the environment
they live. In fact, an actor can react to the changes by either
moving to another behavior or by enabling, disabling or
changing the cases that process the received messages
depending on their current state.</p>
      <p>An execution manager implements the basic functionalities
of an actor on the top of the services provided by the runtime
layer. In particular, it manages the life cycle of the actor by
initializing its behaviors, by processing the received messages
and the firing of message reception timeouts, and by moving it
from a behavior to another one. The type of the implementation
of an execution manager is one of the factors that mainly
influence the attributes of the execution of an application. In
particular, execution managers can be divided in two classes
that allow to an actor either to have its own thread (from here
named active actors) or to share a single thread with the other
actors of the actor space (from here named passive actors).</p>
      <sec id="sec-10-1">
        <title>B. Actor Space Implementation</title>
        <p>An actor space has the duty of supporting the execution of
the actions of its actors and of enhancing them with new kinds
of action. To do it, an actor space takes advantage of some
main runtime components (i.e., factory, dispatcher and registry)
and of the two special actors: the scheduler and the service
provider.</p>
        <p>The factory has the duty of creating the actors of the actor
space. In particular, it also creates their initial behavior,
chooses their most appropriate execution manager and
delegates the creation of their references to the registry.</p>
        <p>The dispatcher has the duty of supporting the
communication with the other actor spaces of the application.
In particular, it creates connections to/from the other actor
spaces, maps remote addresses to the appropriate output
connections, manages the reception of messages from the input
connections, and delivers messages through the output
connections. This component works in collaboration with
another component called connector.</p>
        <p>A connector has the duty of opening and maintaining
connections toward all the other actor spaces of the application.
In particular, the connector of one of the actor spaces of the
application plays the role of communication broker and has the
additional duty of maintaining the information necessary to a
new actor space for creating connections towards the other
actor spaces of the application.</p>
        <p>The registry supports the work of both the factory and the
dispatcher. In fact, it creates the references of the new actors
and supports the delivery of the messages coming from remote
actor by proving the reference of the destination actor to the
dispatcher. In fact, as introduced in a previous section an actor
can send a message to another actor only if it has its reference,
but while the reference of a local actor allows the direct
delivery of messages, the reference of a remote actor delegates
the delivery to the dispatchers of the local and remote actor
spaces (see Fig. 3).</p>
        <p>The scheduler is a special actor that manages the execution
of the actors of an actor space. Of course, the duties of a
scheduler depend on the type of execution manager and, in
particular, on the type of threading solutions associated with
the actors of the actor space. In fact, while Java runtime
environment mainly manage the execution of active actors,
CoDE schedulers completely manage the execution of passive
actors.</p>
        <p>The service provider is a special actor that offers a set of
services for enabling the actors of an application to perform
new kinds of actions. Of course, the actors of the application
can require the execution of such services by sending a
message to the service provider.</p>
        <p>Moreover, an actor space can enable the execution of an
additional runtime component called logger. The logger has the
possibility to store (or to send to another application) the
relevant information about the execution of the actors of the
actor space (e.g., creation and deletion of actors, exchange of
messages, processing of messages and timeouts, exchange of
behaviors). The logger can provides both textual and binary
information that can be useful for understanding the activities
of the application and for diagnosing the causes and solving the
possible execution problems. Moreover, the binary information
contain real copies of the objects of the application (e.g.,
messages and actor state); therefore, such an information can
be used to feed other applications (e.g., monitoring and
simulation tools).</p>
        <p>Finally, the actor space provides a runtime component,
called configurator, which simplifies the configuration of an
application by allowing the use of either a declarative or a
procedural method (i.e., the writing of either a properties file or
a code that calls an API provided by the configurator).</p>
        <p>IV.</p>
        <p>CONFIGURATION</p>
        <p>
          One of the most important features of CoDE is the
possibility of configuring an application with different
implementations of the runtime components. For example,
CoDE supports the communication among the actor spaces
through four kinds of connector that respectively use
ActiveMQ [
          <xref ref-type="bibr" rid="ref25">23</xref>
          ], Java RMI [
          <xref ref-type="bibr" rid="ref17">15</xref>
          ], MINA [3] and ZeroMQ [
          <xref ref-type="bibr" rid="ref13 ref5">11</xref>
          ].
Moreover, the service provider actor can offer an extensible set
of services for enhancing the set of actions that the actors can
perform. The current implementation of the software
framework provides services for supporting the broadcast of
messages, the exchange of messages through the “publish and
subscribe” pattern, the mobility of actors, the interaction with
users through emails and the creation of actors (useful for
creating actors in other actor spaces).
        </p>
        <p>However, the most important components that influence the
quality of the execution of an application are the execution
manager and the associated scheduling actor. In fact, the use of
one or another couple of execution manager and scheduling
actor causes large differences in the performance and in the
scalability of the applications.</p>
        <p>CoDE provides three types of execution managers and four
types of execution scheduling actors. The first two types of
execution manager respectively support the implementation of
active and passive actors (active and passive executors). The
third type provides a special implementation of passive actors
in which the actors receive message from a shared queue
(shared executors). The first two types of scheduling actors
manage the execution of the actor spaces, which contain either
active or passive actors (active and passive schedulers). The
third type manages the execution of the actor spaces where
passive actors share the message queue (shared schedulers).
Finally, the forth type manages the execution of the actor
spaces where both active and passive actors are present (hybrid
schedulers).</p>
        <p>The identification of the best couple of execution manager
and scheduling actor for a specific application mainly depends
on the number of actors, the number of exchanged messages,
the preeminent type of communication used by actors (i.e.,
point-to-point or broadcast) and the presence of a subset of
actors that consume a large part of the computational resources
of the application. Table 1 shows what should be the best
choices for binary partition of the values of the previous
parameters. In particular, the third column indicates the
preeminence of either point-to-point communication (P) or
broadcast communication (B), the forth column indicates the
presence/absence of a subset of heavy actors and the word
“any” is used when the value of the associate parameter has not
effect on the choice of execution manager and scheduler.
actors
few
many
many
many
many
messages
any
any
few
many
any</p>
        <p>The performances of the different types of execution
managers and scheduling actors can be analyzed by comparing
the execution times of two simple applications on a laptop with
an Intel Core 2 - 2.90GHz processor, 16 GB RAM, Windows
8 OS and Java 7 with 4 GB heap size.</p>
        <p>The first application is based on the point-to-point
exchange of messages between the actors of an actor space.
The application starts an actor that creates a certain number of
actors, sends 1000 messages to each of them and then waits for
their answers. Fig 4 shows the execution time of the
application for 5, 10, 100 and 1.000 actors and, as introduced in
table 1, the best performances are obtained with a passive
executor and scheduling actor couple when the number of
actors increases.</p>
        <p>The second application is based on the broadcasting of
messages to the actors of an actor space. The application starts
an actor that creates a certain number of actors and then sends a
broadcast message. Each actor receives the broadcast message,
then, in its response, sends another broadcast message and
finally waits for all the broadcast messages. Fig. 5 shows the
execution time of the application for 5, 10, 100 and 1.000
actors and, as introduced in table 1, the best performances are
obtained with a shared executor and scheduling actor couple.</p>
        <p>Moreover, the use of passive actors allows the development
of applications that scale to a large number of actors. In
particular, the current implementation of the framework allows
to scale up to a million of actors. Fig.6 show the execution
times for 100 cycles of simulation of the game of live [8] for
100, 10.000 and and 1.000.000 actors.</p>
        <p>VI.</p>
        <p>RELATED WORK</p>
        <p>Several actor-oriented libraries and languages have been
proposed in last decades and a large part of them uses Java as
implementation language. The rest of the section presents some
of the most interesting works.</p>
        <p>
          Salsa [
          <xref ref-type="bibr" rid="ref29 ref7">27</xref>
          ] is an actor-based language for mobile and
Internet computing that provides three significant mechanisms
based on the actor model: token-passing continuations, join
continuations, and first-class continuations. In Salsa each actor
has its own thread, and so scalability is limited. Moreover,
message-passing performance suffers from the overhead of
reflective method calls.
        </p>
        <p>
          Kilim [
          <xref ref-type="bibr" rid="ref26">24</xref>
          ] is a framework used to create robust and
massively concurrent actor systems in Java. It takes advantage
of code annotations and of a byte-code post-processor to
simplify the writing of the code. However, it provides only a
very simplified implementation of the actor model where each
actor (called task in Kilim) has a mailbox and a method
defining its behavior. Moreover, it does not provide remote
messaging capabilities.
        </p>
        <p>
          Scala [9] is an object-oriented and functional programming
language that provides an implementation of the actor model
unifying thread based and event based programming models. In
fact, in Scala an actor can suspend with a full thread stack
(receive) or can suspend with just a continuation closure
(react). Therefore, scalability can be obtained by sacrificing
program simplicity. Akka [
          <xref ref-type="bibr" rid="ref28">26</xref>
          ] is an alternative toolkit and
runtime system for developing event-based actors in Scala, but
also providing APIs for developing actor-based systems in
Java. One of its distinguishing features is the hierarchical
organization of actors, so that a parent actor that creates some
children actors is responsible for handling their failures.
        </p>
        <p>
          Jetlang [
          <xref ref-type="bibr" rid="ref24">22</xref>
          ] provides a high performance Java threading
library that should be used for message based concurrency. The
library is designed specifically for high performance
inmemory messaging and does not provide remote messaging
capabilities.
        </p>
        <p>
          AmbientTalk [4] is a distributed object-oriented
programming language whose actor-based and event driven
concurrency model makes it highly suitable for composing
service objects across a mobile network. It provides an actor
implementation based on communicating event loops [
          <xref ref-type="bibr" rid="ref15">13</xref>
          ].
However, each actor is always associated with its own JVM
thread and so it limits the scalability of applications on the
number of actors for JVM.
        </p>
      </sec>
    </sec>
    <sec id="sec-11">
      <title>VII. CONCLUSIONS</title>
      <p>This paper presented a software framework, called CoDE,
which allows the development of efficient large actor based
systems by combining the possibility to use different
implementations of the components driving the execution of
actors with the delegation of the management of the reception
of messages to the execution environment.</p>
      <p>
        CoDE is implemented by using the Java language and is an
evolution of HDS [
        <xref ref-type="bibr" rid="ref21">19</xref>
        ] and ASIDE [
        <xref ref-type="bibr" rid="ref22">20</xref>
        ] from which it derives
the concise actor model, and takes advantages of some
implementation solutions used in JADE [
        <xref ref-type="bibr" rid="ref18">16</xref>
        ]. CoDE shares
with Jetlang, [
        <xref ref-type="bibr" rid="ref24">22</xref>
        ] Kilim [
        <xref ref-type="bibr" rid="ref26">24</xref>
        ] and Scala [9] the possibility to
build applications that scale applications to a massive number
of actors, but without the need of introducing new constructs
that make complex the writing of actor based programs.
Moreover, CoDE has been designed for the development of
distributed applications while the previous three actor based
software were designed for applications running inside
multicore computers. In fact, the use of structured messages and
message patterns makes possible the implementation of
complex interactions in a distributed application because a
message contains all the information for delivery it to the
destination and then for building and sending a reply.
Moreover, a message pattern filters the input messages on all
the information contained in the message and not only on its
content.
      </p>
      <p>
        Current research activities are dedicated to extend the
software framework to offer it as means for the development of
multi-agent systems. Future research activities will be
dedicated to the extension of the functionalities provided by the
software framework and to its experimentation in different
application fields. Regarding the extension of the software
framework, current activities have the goal of providing a
passive threading solution that fully take advantage of the
features of multi-core processors, of enabling the
interoperability with Web services and legacy systems [
        <xref ref-type="bibr" rid="ref20">18</xref>
        ],
and of enhancing the definition of the content exchanged by
actors with semantic Web technologies [
        <xref ref-type="bibr" rid="ref23">21</xref>
        ]. Moreover, future
activities will be dedicated to the provision of a trust
management infrastructure to support the interaction between
actor spaces of different organizations [
        <xref ref-type="bibr" rid="ref19">17</xref>
        ][
        <xref ref-type="bibr" rid="ref27">25</xref>
        ]. Current
experimentation of the software framework is performed in the
field of the modeling and simulation of social networks [6], but
in the next future will be extended to the collaborative work
services [4] and to the agent-based systems for
management of information in pervasive environments [4].
the
software
[Online].
      </p>
      <p>Available:</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          <string-name>
            <given-names>G.A.</given-names>
            <surname>Agha</surname>
          </string-name>
          ,
          <article-title>Actors: A Model of Concurrent Computation in Distributed Systems</article-title>
          , Cambridge, MA: MIT Press,
          <year>1986</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          <string-name>
            <given-names>G.A.</given-names>
            <surname>Agha</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.A.</given-names>
            <surname>Mason</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.F.</given-names>
            <surname>Smith</surname>
          </string-name>
          and
          <string-name>
            <given-names>C.L.</given-names>
            <surname>Talcott</surname>
          </string-name>
          , “
          <article-title>A Foundation for Actor Computation</article-title>
          ,”
          <source>J. of Functional Programming</source>
          , vol.
          <volume>7</volume>
          , no.
          <issue>1</issue>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>69</lpage>
          ,
          <year>1997</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          <string-name>
            <surname>Apache Software Foundation.</surname>
          </string-name>
          (
          <year>2013</year>
          ). Apache [Online]. Available: http://mina.apache.org
          <string-name>
            <surname>Mina Framework F. Bergenti</surname>
            and
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Poggi</surname>
          </string-name>
          , “Ubiquitous Information Agents,
          <source>” Int. J. on Cooperative Information Systems</source>
          , vol.
          <volume>11</volume>
          , no.
          <issue>3-4</issue>
          , pp.
          <fpage>231</fpage>
          -
          <lpage>244</lpage>
          ,
          <year>2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          <string-name>
            <given-names>F.</given-names>
            <surname>Bergenti</surname>
          </string-name>
          ,
          <string-name>
            <surname>A.</surname>
          </string-name>
          , Poggi and
          <string-name>
            <given-names>M.</given-names>
            <surname>Somacher</surname>
          </string-name>
          , “
          <article-title>A collaborative platform for fixed and mobile networks,” Communications of the ACM</article-title>
          , vol.
          <volume>45</volume>
          , no.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          11, pp.
          <fpage>39</fpage>
          -
          <lpage>44</lpage>
          ,
          <year>2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          <string-name>
            <given-names>F.</given-names>
            <surname>Bergenti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Franchi</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Poggi</surname>
          </string-name>
          , “
          <article-title>Selected models for agent-based simulation of social networks</article-title>
          ,
          <source>” in 3rd Symposium on Social Networks and Multiagent Systems (SNAMAS'11)</source>
          , York, UK:
          <source>Society for the Study of Artificial Intelligence and the Simulation of Behaviour</source>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          pp.
          <fpage>27</fpage>
          -
          <lpage>32</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          <string-name>
            <given-names>J.</given-names>
            <surname>Dedecker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T. Van</given-names>
            <surname>Cutsem</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Mostinckx</surname>
          </string-name>
          ,
          <string-name>
            <surname>T. D'Hondt</surname>
          </string-name>
          and W. De Meuter, “
          <article-title>Ambient-oriented programming in ambienttalk,” in ECOOP 2006 -</article-title>
          <string-name>
            <surname>Object-Oriented</surname>
            <given-names>Programming</given-names>
          </string-name>
          , Berlin Heidelberg: Springer,
          <year>2006</year>
          , pp.
          <fpage>230</fpage>
          -
          <lpage>254</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          <string-name>
            <given-names>M.</given-names>
            <surname>Gardner</surname>
          </string-name>
          ,
          <article-title>The fantastic combinations of John Conway's new solitaire game Life</article-title>
          .
          <source>Scientific American</source>
          <volume>223</volume>
          :
          <fpage>120</fpage>
          -
          <lpage>123</lpage>
          ,
          <year>1970</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          <string-name>
            <given-names>P.</given-names>
            <surname>Haller</surname>
          </string-name>
          and
          <string-name>
            <given-names>M.</given-names>
            <surname>Odersky</surname>
          </string-name>
          , “Scala Actors:
          <article-title>Unifying thread-based and event-based programming</article-title>
          ,
          <source>” Theoretical Computer Science</source>
          , vol.
          <volume>410</volume>
          , no.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          <issue>2-3</issue>
          , pp.
          <fpage>202</fpage>
          -
          <lpage>220</lpage>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>C. E.</given-names>
            <surname>Hewitt</surname>
          </string-name>
          , “
          <article-title>Viewing controll structures as patterns of passing messages</article-title>
          ,
          <source>” Artificial Intelligence</source>
          , vol.
          <volume>8</volume>
          , no.
          <issue>3</issue>
          ,
          <issue>1977</issue>
          , pp.
          <fpage>323</fpage>
          -
          <lpage>364</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>P.</given-names>
            <surname>Hintjens</surname>
          </string-name>
          ,
          <article-title>ZeroMQ: Messaging for Many Applications</article-title>
          , Sebastopol, CA:
          <string-name>
            <given-names>O</given-names>
            <surname>'Reilly</surname>
          </string-name>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [12]
          <string-name>
            <surname>C.</surname>
          </string-name>
          <article-title>Leopold, Parallel and Distributed Computing: A Survey of Models, Paradigms</article-title>
          and Approaches, New York, NY, USA: John Wiley &amp; Sons,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>M. S.</given-names>
            <surname>Miller</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E. D.</given-names>
            <surname>Tribble</surname>
          </string-name>
          and
          <string-name>
            <given-names>J.</given-names>
            <surname>Shapiro</surname>
          </string-name>
          , “Concurrency among strangers,” in Trustworthy Global Computing, Berlin Heidelberg: Springer,
          <year>2005</year>
          , pp.
          <fpage>195</fpage>
          -
          <lpage>229</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>M.</given-names>
            <surname>Philippsen</surname>
          </string-name>
          , “
          <article-title>A survey of concurrent object-oriented languages,”</article-title>
          <source>Concurrency: Practice and Experience</source>
          , vol.
          <volume>12</volume>
          , no.
          <issue>10</issue>
          , pp.
          <fpage>917</fpage>
          -
          <lpage>980</lpage>
          ,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>E.</given-names>
            <surname>Pitt</surname>
          </string-name>
          and
          <string-name>
            <given-names>K.</given-names>
            <surname>McNiff</surname>
          </string-name>
          ,
          <string-name>
            <surname>Java.</surname>
          </string-name>
          <article-title>rmi: the Remote Method Invocation Guide</article-title>
          . Boston, MA, USA:
          <string-name>
            <surname>Addison-Wesley</surname>
          </string-name>
          ,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>A.</given-names>
            <surname>Poggi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Tomaiuolo</surname>
          </string-name>
          and
          <string-name>
            <given-names>P.</given-names>
            <surname>Turci</surname>
          </string-name>
          , “
          <article-title>Extending JADE for agent grid applications,” in 13th IEEE Int. Workshops on Enabling Technologies: Infrastructure for Collaborative Enterprises (WET ICE</article-title>
          <year>2004</year>
          ), Modena, Italy,
          <year>2004</year>
          , pp.
          <fpage>352</fpage>
          -
          <lpage>357</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>A.</given-names>
            <surname>Poggi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Tomaiuolo</surname>
          </string-name>
          and G. Vitaglione, “
          <article-title>A Security Infrastructure for Trust Management in Multi-agent Systems,” in Trusting Agents for Trusting Electronic Societies, Theory and Applications in HCI and ECommerce, LNCS</article-title>
          , vol.
          <volume>3577</volume>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Falcone</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Barber</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M. P.</given-names>
            <surname>Singh</surname>
          </string-name>
          , Eds. Berlin, Germany: Springer,
          <year>2005</year>
          , pp.
          <fpage>162</fpage>
          -
          <lpage>179</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>A.</given-names>
            <surname>Poggi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Tomaiuolo</surname>
          </string-name>
          and
          <string-name>
            <given-names>P.</given-names>
            <surname>Turci</surname>
          </string-name>
          , “
          <article-title>An Agent-Based Service Oriented Architecture”</article-title>
          ,
          <source>in Proc of. WOA</source>
          , Genova, Italy,
          <year>2007</year>
          , pp.
          <fpage>157</fpage>
          -
          <lpage>165</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>A.</given-names>
            <surname>Poggi</surname>
          </string-name>
          , “
          <article-title>HDS: a Software Framework for the Realization of Pervasive Applications,”</article-title>
          <source>WSEAS Trans. on Computers</source>
          , vol.
          <volume>10</volume>
          , no.
          <issue>9</issue>
          , pp.
          <fpage>1149</fpage>
          -
          <lpage>1159</lpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>A.</given-names>
            <surname>Poggi</surname>
          </string-name>
          , “
          <article-title>ASiDE - A Software Framework for Complex and Distributed Systems,”</article-title>
          <source>in Proc. of the 16th WSEAS Int. Conf. on Computers</source>
          , Kos, Greece,
          <year>2012</year>
          , pp.
          <fpage>353</fpage>
          -
          <lpage>358</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>A.</given-names>
            <surname>Poggi</surname>
          </string-name>
          , “
          <article-title>Developing ontology based applications with O3L,”</article-title>
          <source>WSEAS Trans. on Computers</source>
          , vol.
          <volume>8</volume>
          no.
          <issue>8</issue>
          , pp.
          <fpage>1286</fpage>
          -
          <lpage>1295</lpage>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>M.</given-names>
            <surname>Rettig</surname>
          </string-name>
          . (
          <year>2013</year>
          ). Jetlang http://code.google.com/p/jetlang/
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>B.</given-names>
            <surname>Snyder</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Bosnanac</surname>
          </string-name>
          and
          <string-name>
            <given-names>R.</given-names>
            <surname>Davies</surname>
          </string-name>
          , ActiveMQ in action, Westampton, NJ, USA: Manning,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>S.</given-names>
            <surname>Srinivasan</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Mycroft</surname>
          </string-name>
          , “Kilim:
          <article-title>Isolation-Typed Actors for Java,” in ECOOP 2008 - Object-Oriented Programming, LNCS</article-title>
          , vol.
          <volume>5142</volume>
          , J. Vitek, Ed. Berlin ,Germany: Springer,
          <year>2008</year>
          , pp.
          <fpage>104</fpage>
          -
          <lpage>128</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>M.</given-names>
            <surname>Tomaiuolo</surname>
          </string-name>
          , “dDelega: Trust Management for Web Services,
          <source>” Int. J. of Information Security and Privacy</source>
          , vol.
          <volume>7</volume>
          , no.
          <issue>3</issue>
          , pp.
          <fpage>53</fpage>
          -
          <lpage>67</lpage>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          [26]
          <string-name>
            <surname>Typesafe</surname>
          </string-name>
          . (
          <year>2013</year>
          )
          <article-title>Akka software</article-title>
          [Online]. Available: http://akka.io
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          [27]
          <string-name>
            <given-names>C.</given-names>
            <surname>Varela</surname>
          </string-name>
          and
          <string-name>
            <given-names>G.A.</given-names>
            <surname>Agha</surname>
          </string-name>
          , “
          <article-title>Programming dynamically reconfigurable open systems with SALSA,” SIGPLAN Notices</article-title>
          , vol.
          <volume>36</volume>
          , no.
          <issue>12</issue>
          , pp.
          <fpage>20</fpage>
          -
          <lpage>34</lpage>
          ,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>