Erlang Message Passing Concurrency, For The Win

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    6 Favorites

    Erlang Message Passing Concurrency, For The Win - Presentation Transcript

    1. Erlang Message Passing Concurrency, For The Win Toby DiPasquale Commerce360, Inc. Presented to Philly Linux Users Group June 6, 2007
    2. Er-what? Language/runtime created at Ericsson Designed for scalable, long-lived systems Not object oriented Compiled, Functional, Dynamically typed, Open source
    3. Another f***** language? Pattern matching Message-passing concurrency Distributed programming Hot code update
    4. Runway Models Meebo SlideAware RabbitMQ Jabber.org OpenPoker
    5. Sequential
    6. = Not what you think it is, Performs a “binding” Invokes pattern matching, Pattern matching like Prolog, nevermind Perl regexs
    7. Syntax Variables start with uppercase letter Variables can only be assigned once Last evaluation is return value of function Functions and shell exprs end in period Clauses end in semicolon
    8. She’s got the look -module(math_o_matics). -export([square/1]). square(X) -> X * X.
    9. Atoms Self-indicating identifiers Start with lowercase letter Can also be quoted with single quotes atom this_is_an_atom ‘I am also an atom’ Used just like you’d use an enum in C or a Symbol in Lisp or Ruby
    10. Tuples Fixed length containers Often prepended with an identifier atom Decompose with pattern matching Car = {car, {honda, civic}, {horsepower, 100}}. {car, Type, Power} = Car.
    11. Lists Variable length containers Use [H|T] syntax to get head and tail of list List = [1, 2, 3, four, 5.0] [Head|Tail] = List [H1,H2|T2] = List Use lists just like you would in Lisp Do something to head, recursively; [H|T] syntax is pattern matching
    12. Strings Not really Strings are just lists of integers Must use double quotes Meeting = “PLUG”. Meeting2 = [80,76,85,71]. Those two examples at the bottom are the same string; String handling blows in Erlang No Unicode
    13. Arity Use functions with same name and different arity* as auxiliary functions -module(math_o_matics). -export([sum/1]). sum(L) -> sum(L, 0). sum([], N) -> N; sum([H|T], N) -> sum(T, H+N). * ‘Arity’ refers to the number of input parameters a function takes
    14. Modules Logically associated code block Use colon (:) to use intermodule code Use -import to avoid prefixing io:format(“Using the module io~n”). One module per file
    15. The “fun” in functional Anonymous functions Used for higher-order programming Square = fun(X) -> X * X end. Cube = fun(X) -> Square(X) * X end.
    16. List Comprehensions Takes an expression and a set of qualifiers and returns another list (like Python’s) Looks like: [X || Q1, Q2, ... Qn ] qsort([]) -> []; qsort([Pivot|T]) -> qsort([X || X <- T, X < Pivot]) ++ [Pivot] ++ qsort([X || X <- T, X >= Pivot]).
    17. Guards Simple tests against a pattern matching Can make code more concise max(X, Y) when X > Y -> X; max(X, Y) -> Y. Multiple guards separated by a semicolon; Other guards include: arithmetic exprs, short-circuit boolean exprs, constants (False), true (True)
    18. Biting the bits Syntax for extracting/packing bits <<?IP_VERSION:4, HLen:4, SrvcType:8, TotLen:16, ID:16, Flgs:3, FragOff:13, TTL:8, Proto:8, HdrChkSum:16, SrcIP:32, DestIP:32, RestDgram/binary>> Can do signed, unsigned, big-endian and little-endian, integer, float and binary qualifiers Example decomposes an IPv4 packet
    19. Concurrency
    20. Shared Memory Image credit: http://www.ja.org/nested/berrienandcass/kelly-vault.jpg Lots of contention in there; Sweaty and noisy after a while Unpleasant; Teacher must watch to make sure things go smoothly (single point of failure)
    21. Message Passing Image credit: http://english.people.com.cn/200512/21/images/pop2.jpg Pass messages to communicate; Stability through replication and communication More like real world concurrent systems; No mutexes, semaphores, monitors, etc to deal with
    22. Processes Basic unit of concurrency Use spawn/0, !/1 (a.k.a. send) and receive/1 BIF’s* Asynchronous send, synchronous receive * BIF means “Built-in Function” Owned by runtime, not OS; Very cheap and fast to spawn; No shared memory between processes
    23. Concurrency Template* -module(template). -compile(export_all). start() -> spawn(fun() -> loop([]) end). rpc(Pid, Query) -> Pid ! {self(), Query}, receive {Pid, Reply} -> Reply end. loop(X) -> receive Any -> io:format(\"Received:~p~n\", [Any]), loop(X) end. * Courtesy of Joe Armstrong in Programming Erlang, First Edition loop/1 is tail-recursive when you get a new message, add a clause to receive in rpc/2
    24. Errors Linking processes defines error chain When a process dies, linked processes are sent an exit signal Use spawn_link/1 to spawn linked processes Only system processes can trap special exit signals
    25. Distributing Erlang Erlang has built-in support for distributed operation Two modes: Distributed Erlang (easier, less secure) Socket-based distribution (more secure) Distributed Erlang looks largely the same as non-distributed
    26. Distributing Erlang (2) Two libraries for higher-level Distributed Erlang: rpc - RPC services global - naming, locking, maintenance Cookie based security model security is crappy, suitable only for protected LANs each machine is given a cookie; cookie must be same for all nodes in cluster
    27. ets and dets Erlang Term Storage (and Disk ets) Dictionary for mad loads of Erlang data ets tables are transient, dets are persistent support insertion/lookup of keys and deletion of entire table
    28. Mnesia Real-time, distributed database that comes with Erlang Query language looks like SQL/list comprehensions Built-in visualization tools Can store data in memory or on disk Mnesia is built on top of ets and dets
    29. OTP Open Telecom Platform Web server, FTP server, CORBA ORB, ASN.1, SNMP, etc Designed around encapsulated “behaviors” Has lots more than telco stu; set of libraries and platforms for building large-scale apps behaviors help code up large-scale apps (e.g. gen_tcp, gen_server)
    30. Hot Erlang-on-Erlang action Yaws Super scalable Web server/platform ejabberd Super scalable XMPP server RabbitMQ Super scalable message broker Seeing a pattern here?
    31. RTFM Programming Erlang (PDF and dead tree versions; great book) Concurrent Programming with Erlang (older; first half available online) Erlang Website Trapexit forums erlang-questions mailing list
    32. Huh huh huh huh... you said ‘Erlang’ Slides: http://cbcg.net/talks/erlang.pdf Me: toby@cbcg.net

    + l xfl xf, 3 years ago

    custom

    5082 views, 6 favs, 0 embeds more stats

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 5082
      • 5082 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 6
    • Downloads 142
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories