• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
06svenss
 

06svenss

on

  • 784 views

 

Statistics

Views

Total Views
784
Views on SlideShare
782
Embed Views
2

Actions

Likes
0
Downloads
9
Comments
0

1 Embed 2

http://mensagensvirtuais.xpg.uol.com.br 2

Accessibility

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    06svenss 06svenss Presentation Transcript

    • Programming Distributed Erlang Applications: Pitfalls and Recipes + A More Accurate Semantics for Distributed Erlang Hans Svensson Chalmers University of Technology Lars-Åke Fredlund Universidad Politécnica de Madrid Erlang Workshop, Freiburg, 5 Oct. 2007
    • Two Papers One Talk!? Message passing guarantees McErlang Pitfalls A More Accurate Semantics for Distributed Erlang A Semantics for Distributed Erlang Programming Distributed Erlang Applications: Pitfalls and Recipes Communication with dead processes Dropping messages
    • Talking to the Dead N 1 N 2 P 1 erlang:process_flag(trap_exit,true), Pid = spawn_link(N 2 ,m,addTwo,[]), -module(m). addTwo()-> receive {Pid,Num} -> Pid ! Num + 2 end, addTwo(). Pid ! {self(),5}, receive N -> io:format(“~p ”,[N]) end, 5+2 P 2 {P 1 ,5} 7
    • Talking to the Dead N 1 N 2 P 1 receive {‘EXIT’,Pid,Reason} –> ok end, P 2 {‘EXIT’,P 2 ,terminated}
    • Talking to the Dead N 1 N 2 P 1 -module(m2). mulTwo()-> receive {Pid,Num} -> Pid ! Num * 2 end, mulTwo(). Pid ! {self(),5}, receive N -> io:format(“~p ”,[N]) end, 5*2 ? ? {P 1 ,5} 10
    • Behind the scene
      • N 2 was stopped and restarted
      • A new process managed to get exactly the same pid
      • Since the pid data structure is finite, this is expected, however…
      • The magic number is 3!
      • This ‘feature’ can not be modeled even in the more accurate semantics
    • Losing messages N 1 P 1 N 2 P 2 snd(Pid,N)-> Pid ! N, io:format(“~p “,[N]), timer:sleep(5000), snd(Pid,N+1). rcv()-> receive N -> io:format(“~p “,[N]), end, rcv(). 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 1 2 3 4 5 6 7 8 9 10 11 27 28 29 1 2 3 …
    • Behind the scene
      • N 1 and N 2 was disconnected and later reconnected
      • Easily discovered by using links
      • Never rely on distributed communication without supervision
      • This scenario can be correctly modeled in the improved semantics
    • Distributed communication N 1 P 1 N 2 P 2 N 3 P 3 hello world world hello world world hello
    • Distributed communication N 1 P 1 N 2 P 2 N 3 P 3 hello world world P 3 hello world
    • Behind the scene
      • Only one (TCP-)connection between N 1 and N 2
      • A rather obscure guarantee
      • Not recommended to exploit this guarantee in application, future runtime systems might break it
      • This communication guarantee is not reflected in the semantics, there only the weaker guarantee holds
    • Practical considerations
      • There is always a difference between any model and the actual runtime system
      • Artifacts of the OTP implementation of the runtime system should not be exploited
    • Changes in the Semantics
      • New rules for node disconnect
      • Simplified rules for node failure and restart
      • A more compact formulation of fairness
      • Properties of the distributed semantics
        • Extension
        • Message reordering and node disconnect
        • Expressiveness
        • Finite systems stays finite
    • Survey!
    • Summary
      • The possibility of reusing a Pid should not be neglected
      • Distributed communication should always be supervised
      • 3 is quite a small number, is it possible to use a larger number?
    • A message from Lars-Åke
      • He is at home, working on a new runtime system
      • He has not figured out the complete semantics, yet!
      Erik Hello world! (or will it be World Hello!)