Concurrent Programming Actors, SALSA, Coordination Abstractions - PowerPoint PPT Presentation

About This Presentation
Title:

Concurrent Programming Actors, SALSA, Coordination Abstractions

Description:

An actor-oriented language for mobile and internet computing ... Ask (delegate) actor b to respond to this message m on behalf of current actor ... – PowerPoint PPT presentation

Number of Views:33
Avg rating:3.0/5.0
Slides: 24
Provided by: csr22
Learn more at: http://www.cs.rpi.edu
Category:

less

Transcript and Presenter's Notes

Title: Concurrent Programming Actors, SALSA, Coordination Abstractions


1
Concurrent ProgrammingActors, SALSA,
Coordination Abstractions
  • Carlos Varela
  • RPI

2
Overview of concurrent programming
  • There are four basic approaches
  • Sequential programming (no concurrency)
  • Declarative concurrency (streams in a functional
    language)
  • Message passing with active objects (Erlang,
    SALSA)
  • Atomic actions on shared state (Java)
  • The atomic action approach is the most difficult,
    yet it is the one you will probably be most
    exposed to!
  • But, if you have the choice, which approach to
    use?
  • Use the simplest approach that does the job
    sequential if that is ok, else declarative
    concurrency if there is no observable
    nondeterminism, else message passing if you can
    get away with it.

3
Actors/SALSA
  • Actor Model
  • A reasoning framework to model concurrent
    computations
  • Programming abstractions for distributed open
    systems
  • G. Agha, Actors A Model of Concurrent
    Computation in Distributed Systems. MIT Press,
    1986.
  • SALSA
  • Simple Actor Language System and Architecture
  • An actor-oriented language for mobile and
    internet computing
  • Programming abstractions for internet-based
    concurrency, distribution, mobility, and
    coordination
  • C. Varela and G. Agha, Programming dynamically
    reconfigurable open systems with SALSA, ACM
    SIGPLAN Notices, OOPSLA 2001, 36(12), pp 20-34.

4
SALSA Support for Actors
  • Programmers define behaviors for actors.
  • Messages are sent asynchronously.
  • State is modeled as encapsulated
    objects/primitive types.
  • Messages are modeled as potential method
    invocations.
  • Continuation primitives are used for
    coordination.

5
Actor Creation
  • To create an actor locally
  • TravelAgent a new TravelAgent()
  • To create an actor with a specified UAN and UAL
  • TravelAgent a new TravelAgent() at (uan, ual)
  • At current location with a UAN
  • TravelAgent a new TravelAgent() at (uan)

6
Message Sending
  • TravelAgent a new TravelAgent()
  • a lt- book( flight )

7
Remote Message Sending
  • Obtain a remote actor reference by name.
  • TravelAgent a getReferenceByName(uan//myhost/t
    a)
  • a lt- printItinerary()

8
Migration
  • Obtaining a remote actor reference and migrating
    the actor.
  • TravelAgent a
  • getReferenceByName(uan//myhost/ta)
  • a lt- migrate( rmsp//yourhost/travel ) _at_
  • a lt- printItinerary()

9
Token Passing Continuations
  • Ensures that each message in the continuation
    expression is sent after the previous message has
    been processed. It also enables the use of a
    message handler return value as an argument for a
    later message (through the token keyword).
  • Example
  • a1 lt- m1() _at_
  • a2 lt- m2( token )
  • Send m1 to a1 asking a1 to forward the result of
    processing m1 to a2 (as the argument of message
    m2).

10
Join Blocks
  • Provide a mechanism for synchronizing the
    processing of a set of messages.
  • Set of results is sent along as a token.
  • Example
  • Actor actors searcher0, searcher1,
    searcher2, searcher3
  • join actors lt- find( phrase ) _at_
  • resultActor lt- output( token )
  • Send the find( phrase ) message to each actor in
    actors then after all have completed send the
    result to resultActor as the argument of an
    output( ) message.

11
Example Acknowledged Multicast
  • join a1 lt- m1() a2 lt- m2 a3 lt- m3() _at_
  • cust lt- n(token)

12
Lines of Code Comparison
13
First Class Continuations
  • Enable actors to delegate computation to a third
    party independently of the processing context.
  • For example
  • int m()
  • b lt- n() _at_ currentContinuation
  • Ask (delegate) actor b to respond to this message
    m on behalf of current actor (self) by processing
    its own message n.

14
Fibonacci Example
  • module examples.fibonacci
  • behavior Fibonacci
  • int n
  • Fibonacci(int n) this.n n
  • int add(int x, int y) return x y
  • int compute()
  • if (n 0) return 0
  • else if (n lt 2) return 1
  • else
  • Fibonacci fib1 new Fibonacci(n-1)
  • Fibonacci fib2 new Fibonacci(n-2)
  • token x fib1lt-compute()
  • token y fib2lt-compute()
  • add(x,y) _at_ currentContinuation

15
SALSA and Java
  • SALSA source files are compiled into Java source
    files before being compiled into Java byte code.
  • SALSA programs may take full advantage of the
    Java API.

16
Hello World Example
  • module demo
  • behavior HelloWorld
  • void act( String args )
  • standardOutputlt-print( "Hello" ) _at_
  • standardOutputlt-println( "World!" )

17
Hello World Example
  • The act( String args ) message handler is
    similar to the main() method in Java and is used
    to bootstrap SALSA programs.
  • When a SALSA program is executed, an actor of the
    given behavior is created and an act(args)
    message is sent to this actor with any given
    command-line arguments.

18
Migration Example
behavior Migrate    void print()      
standardOutputlt-println( "Migrate actor is here."
)      void act( String args )       if
(args.length ! 3)         standardOutputlt-print
ln("Usage salsa Migrate ltUANgt ltsrcUALgt
ltdestUALgt")         return              UAN
uan new UAN(args0)        UAL ual new
UAL(args1)        Migrate  migrateActor
new Migrate() at (uan, ual)       
migrateActorlt-print() _at_       
migrateActorlt-migrate( args2 ) _at_       
migrateActorlt-print()  
19
Migration Example
  • The program must be given valid universal actor
    name and locations.
  • After remotely creating the actor. It sends the
    print message to itself before migrating to the
    second theater and sending the message again.

20
Compilation
java SalsaCompiler Migrate.salsa SALSA Compiler
Version 1.0 Reading from file
demo/Migrate.salsa . . . SALSA Compiler Version
1.0 SALSA program parsed successfully. SALSA
Compiler Version 1.0 SALSA program compiled
successfully. javac Migrate.java java
Migrate Usage java Migrate ltuangt ltualgt ltualgt
  • Compile Migrate.salsa file into Migrate.java.
  • Compile Migrate.java file into Migrate.class.
  • Execute Migrate

21
Migration Example
UAN Server
The actor will print "Migrate actor just migrated
here." at theater 1 then at theater 2.
22
World Migrating Agent Example
23
Exercises
  • How would you implement the join continuation
    linguistic abstraction in terms of message
    passing?
  • Download and execute the Migrate.salsa example.
  • Write a solution to the Flavius Josephus problem
    in SALSA. A description of the problem is at VRH
    Section7.8.3.
Write a Comment
User Comments (0)
About PowerShow.com