SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Downloaden Sie, um offline zu lesen
Erlang
    Message Passing
Concurrency, For The Win


            Toby DiPasquale
          Commerce360, Inc.
 Presented to Philly Linux Users Group
             June 6, 2007
Er-what?


                 Language/runtime created at Ericsson

                 Designed for scalable, long-lived systems

                 Not object oriented




Compiled, Functional, Dynamically typed, Open source
Another f*****
       language?

Pattern matching

Message-passing concurrency

Distributed programming

Hot code update
Runway Models

Meebo

SlideAware

RabbitMQ

Jabber.org

OpenPoker
Sequential
=

Not what you think it is, Performs a “binding”
Invokes pattern matching, Pattern matching like Prolog, nevermind Perl regexs
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
She’s got the look


-module(math_o_matics).
-export([square/1]).

square(X) ->
    X * X.
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
Tuples
Fixed length containers

Often prepended with an identifier atom

Decompose with pattern matching

Car = {car,
        {honda, civic},
        {horsepower, 100}}.

{car, Type, Power} = Car.
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
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
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
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
The “fun” in functional

   Anonymous functions

   Used for higher-order programming



Square = fun(X) -> X * X end.

Cube = fun(X) -> Square(X) * X end.
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]).
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)
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
Concurrency
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)
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
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
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(quot;Received:~p~nquot;, [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
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
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
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
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
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
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)
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?
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
Huh huh huh huh... you said
         ‘Erlang’
  Slides: http://cbcg.net/talks/erlang.pdf

            Me: toby@cbcg.net

Weitere ähnliche Inhalte

Was ist angesagt?

Compilation and Execution
Compilation and ExecutionCompilation and Execution
Compilation and ExecutionChong-Kuan Chen
 
Erlang Developments: The Good, The Bad and The Ugly
Erlang Developments: The Good, The Bad and The UglyErlang Developments: The Good, The Bad and The Ugly
Erlang Developments: The Good, The Bad and The Uglyenriquepazperez
 
Concurrent Programming OpenMP @ Distributed System Discussion
Concurrent Programming OpenMP @ Distributed System DiscussionConcurrent Programming OpenMP @ Distributed System Discussion
Concurrent Programming OpenMP @ Distributed System DiscussionCherryBerry2
 
Implementation - Sample Runs
Implementation - Sample RunsImplementation - Sample Runs
Implementation - Sample RunsAdwiteeya Agrawal
 
06 - ELF format, knowing your friend
06 - ELF format, knowing your friend06 - ELF format, knowing your friend
06 - ELF format, knowing your friendAlexandre Moneger
 
OpenMP Tutorial for Beginners
OpenMP Tutorial for BeginnersOpenMP Tutorial for Beginners
OpenMP Tutorial for BeginnersDhanashree Prasad
 
.Net Multithreading and Parallelization
.Net Multithreading and Parallelization.Net Multithreading and Parallelization
.Net Multithreading and ParallelizationDmitri Nesteruk
 
DUSK - Develop at Userland Install into Kernel
DUSK - Develop at Userland Install into KernelDUSK - Develop at Userland Install into Kernel
DUSK - Develop at Userland Install into KernelAlexey Smirnov
 
Programming using Open Mp
Programming using Open MpProgramming using Open Mp
Programming using Open MpAnshul Sharma
 
EKON 25 Python4Delphi_mX4
EKON 25 Python4Delphi_mX4EKON 25 Python4Delphi_mX4
EKON 25 Python4Delphi_mX4Max Kleiner
 
Building the Internet of Things with Thingsquare and Contiki - day 2 part 1
Building the Internet of Things with Thingsquare and Contiki - day 2 part 1Building the Internet of Things with Thingsquare and Contiki - day 2 part 1
Building the Internet of Things with Thingsquare and Contiki - day 2 part 1Adam Dunkels
 
Use of an Oscilloscope - maXbox Starter33
Use of an Oscilloscope - maXbox Starter33Use of an Oscilloscope - maXbox Starter33
Use of an Oscilloscope - maXbox Starter33Max Kleiner
 

Was ist angesagt? (20)

Open mp intro_01
Open mp intro_01Open mp intro_01
Open mp intro_01
 
Loader
LoaderLoader
Loader
 
Compilation and Execution
Compilation and ExecutionCompilation and Execution
Compilation and Execution
 
Erlang Developments: The Good, The Bad and The Ugly
Erlang Developments: The Good, The Bad and The UglyErlang Developments: The Good, The Bad and The Ugly
Erlang Developments: The Good, The Bad and The Ugly
 
Introduction to OpenMP
Introduction to OpenMPIntroduction to OpenMP
Introduction to OpenMP
 
Concurrent Programming OpenMP @ Distributed System Discussion
Concurrent Programming OpenMP @ Distributed System DiscussionConcurrent Programming OpenMP @ Distributed System Discussion
Concurrent Programming OpenMP @ Distributed System Discussion
 
Implementation - Sample Runs
Implementation - Sample RunsImplementation - Sample Runs
Implementation - Sample Runs
 
06 - ELF format, knowing your friend
06 - ELF format, knowing your friend06 - ELF format, knowing your friend
06 - ELF format, knowing your friend
 
OpenMP Tutorial for Beginners
OpenMP Tutorial for BeginnersOpenMP Tutorial for Beginners
OpenMP Tutorial for Beginners
 
Dynamic Linker
Dynamic LinkerDynamic Linker
Dynamic Linker
 
.Net Multithreading and Parallelization
.Net Multithreading and Parallelization.Net Multithreading and Parallelization
.Net Multithreading and Parallelization
 
DUSK - Develop at Userland Install into Kernel
DUSK - Develop at Userland Install into KernelDUSK - Develop at Userland Install into Kernel
DUSK - Develop at Userland Install into Kernel
 
Programming using Open Mp
Programming using Open MpProgramming using Open Mp
Programming using Open Mp
 
Design
DesignDesign
Design
 
An Introduction to OMNeT++ 5.1
An Introduction to OMNeT++ 5.1An Introduction to OMNeT++ 5.1
An Introduction to OMNeT++ 5.1
 
Lecture8
Lecture8Lecture8
Lecture8
 
EKON 25 Python4Delphi_mX4
EKON 25 Python4Delphi_mX4EKON 25 Python4Delphi_mX4
EKON 25 Python4Delphi_mX4
 
Matlab isim link
Matlab isim linkMatlab isim link
Matlab isim link
 
Building the Internet of Things with Thingsquare and Contiki - day 2 part 1
Building the Internet of Things with Thingsquare and Contiki - day 2 part 1Building the Internet of Things with Thingsquare and Contiki - day 2 part 1
Building the Internet of Things with Thingsquare and Contiki - day 2 part 1
 
Use of an Oscilloscope - maXbox Starter33
Use of an Oscilloscope - maXbox Starter33Use of an Oscilloscope - maXbox Starter33
Use of an Oscilloscope - maXbox Starter33
 

Andere mochten auch

Scalable Networking
Scalable NetworkingScalable Networking
Scalable Networkingl xf
 
NDC London 2014: Thinking Like an Erlanger
NDC London 2014: Thinking Like an ErlangerNDC London 2014: Thinking Like an Erlanger
NDC London 2014: Thinking Like an ErlangerTorben Hoffmann
 
1300579454645 livro adm proc operacionais
1300579454645 livro adm proc operacionais1300579454645 livro adm proc operacionais
1300579454645 livro adm proc operacionaisPMP
 
Message-passing concurrency in Python
Message-passing concurrency in PythonMessage-passing concurrency in Python
Message-passing concurrency in PythonSarah Mount
 
Comparing Cpp And Erlang For Motorola Telecoms Software
Comparing Cpp And Erlang For Motorola Telecoms SoftwareComparing Cpp And Erlang For Motorola Telecoms Software
Comparing Cpp And Erlang For Motorola Telecoms Softwarel xf
 
Introdução à Computação Aula 05 - Sistemas Operacionais (arquitetura do SO, p...
Introdução à Computação Aula 05 - Sistemas Operacionais (arquitetura do SO, p...Introdução à Computação Aula 05 - Sistemas Operacionais (arquitetura do SO, p...
Introdução à Computação Aula 05 - Sistemas Operacionais (arquitetura do SO, p...Leinylson Fontinele
 
Erlang - Because s**t Happens by Mahesh Paolini-Subramanya
Erlang - Because s**t Happens by Mahesh Paolini-SubramanyaErlang - Because s**t Happens by Mahesh Paolini-Subramanya
Erlang - Because s**t Happens by Mahesh Paolini-SubramanyaHakka Labs
 
Clojure made-simple - John Stevenson
Clojure made-simple - John StevensonClojure made-simple - John Stevenson
Clojure made-simple - John StevensonJAX London
 
20 reasons why we don't need architects (@pavlobaron)
20 reasons why we don't need architects (@pavlobaron)20 reasons why we don't need architects (@pavlobaron)
20 reasons why we don't need architects (@pavlobaron)Pavlo Baron
 
Winning the Erlang Edit•Build•Test Cycle
Winning the Erlang Edit•Build•Test CycleWinning the Erlang Edit•Build•Test Cycle
Winning the Erlang Edit•Build•Test CycleRusty Klophaus
 
Messaging With Erlang And Jabber
Messaging With  Erlang And  JabberMessaging With  Erlang And  Jabber
Messaging With Erlang And Jabberl xf
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)Pavlo Baron
 
VoltDB and Erlang - Tech planet 2012
VoltDB and Erlang - Tech planet 2012VoltDB and Erlang - Tech planet 2012
VoltDB and Erlang - Tech planet 2012Eonblast
 
NDC London 2014: Erlang Patterns Matching Business Needs
NDC London 2014: Erlang Patterns Matching Business NeedsNDC London 2014: Erlang Patterns Matching Business Needs
NDC London 2014: Erlang Patterns Matching Business NeedsTorben Hoffmann
 

Andere mochten auch (20)

Scalable Networking
Scalable NetworkingScalable Networking
Scalable Networking
 
NDC London 2014: Thinking Like an Erlanger
NDC London 2014: Thinking Like an ErlangerNDC London 2014: Thinking Like an Erlanger
NDC London 2014: Thinking Like an Erlanger
 
1300579454645 livro adm proc operacionais
1300579454645 livro adm proc operacionais1300579454645 livro adm proc operacionais
1300579454645 livro adm proc operacionais
 
Cassandra
CassandraCassandra
Cassandra
 
Message-passing concurrency in Python
Message-passing concurrency in PythonMessage-passing concurrency in Python
Message-passing concurrency in Python
 
Comparing Cpp And Erlang For Motorola Telecoms Software
Comparing Cpp And Erlang For Motorola Telecoms SoftwareComparing Cpp And Erlang For Motorola Telecoms Software
Comparing Cpp And Erlang For Motorola Telecoms Software
 
Introdução à Computação Aula 05 - Sistemas Operacionais (arquitetura do SO, p...
Introdução à Computação Aula 05 - Sistemas Operacionais (arquitetura do SO, p...Introdução à Computação Aula 05 - Sistemas Operacionais (arquitetura do SO, p...
Introdução à Computação Aula 05 - Sistemas Operacionais (arquitetura do SO, p...
 
Apostila de sistemas operacionais
Apostila de sistemas operacionaisApostila de sistemas operacionais
Apostila de sistemas operacionais
 
Erlang - Because s**t Happens by Mahesh Paolini-Subramanya
Erlang - Because s**t Happens by Mahesh Paolini-SubramanyaErlang - Because s**t Happens by Mahesh Paolini-Subramanya
Erlang - Because s**t Happens by Mahesh Paolini-Subramanya
 
Clojure made-simple - John Stevenson
Clojure made-simple - John StevensonClojure made-simple - John Stevenson
Clojure made-simple - John Stevenson
 
20 reasons why we don't need architects (@pavlobaron)
20 reasons why we don't need architects (@pavlobaron)20 reasons why we don't need architects (@pavlobaron)
20 reasons why we don't need architects (@pavlobaron)
 
Clojure class
Clojure classClojure class
Clojure class
 
Winning the Erlang Edit•Build•Test Cycle
Winning the Erlang Edit•Build•Test CycleWinning the Erlang Edit•Build•Test Cycle
Winning the Erlang Edit•Build•Test Cycle
 
Clojure values
Clojure valuesClojure values
Clojure values
 
Elixir talk
Elixir talkElixir talk
Elixir talk
 
Messaging With Erlang And Jabber
Messaging With  Erlang And  JabberMessaging With  Erlang And  Jabber
Messaging With Erlang And Jabber
 
High Performance Erlang
High  Performance  ErlangHigh  Performance  Erlang
High Performance Erlang
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)
 
VoltDB and Erlang - Tech planet 2012
VoltDB and Erlang - Tech planet 2012VoltDB and Erlang - Tech planet 2012
VoltDB and Erlang - Tech planet 2012
 
NDC London 2014: Erlang Patterns Matching Business Needs
NDC London 2014: Erlang Patterns Matching Business NeedsNDC London 2014: Erlang Patterns Matching Business Needs
NDC London 2014: Erlang Patterns Matching Business Needs
 

Ähnlich wie Erlang Message Passing Concurrency, For The Win

Sioux Hot-or-Not: Functional programming: unlocking the real power of multi-c...
Sioux Hot-or-Not: Functional programming: unlocking the real power of multi-c...Sioux Hot-or-Not: Functional programming: unlocking the real power of multi-c...
Sioux Hot-or-Not: Functional programming: unlocking the real power of multi-c...siouxhotornot
 
Keynote joearmstrong
Keynote joearmstrongKeynote joearmstrong
Keynote joearmstrongSentifi
 
Introduction To Erlang Final
Introduction To Erlang   FinalIntroduction To Erlang   Final
Introduction To Erlang FinalSinarShebl
 
Reversing & Malware Analysis Training Part 4 - Assembly Programming Basics
Reversing & Malware Analysis Training Part 4 - Assembly Programming BasicsReversing & Malware Analysis Training Part 4 - Assembly Programming Basics
Reversing & Malware Analysis Training Part 4 - Assembly Programming Basicssecurityxploded
 
Diving into Functional Programming
Diving into Functional ProgrammingDiving into Functional Programming
Diving into Functional ProgrammingLev Walkin
 
220 runtime environments
220 runtime environments220 runtime environments
220 runtime environmentsJ'tong Atong
 
Лев Валкин — Программируем функционально
Лев Валкин — Программируем функциональноЛев Валкин — Программируем функционально
Лев Валкин — Программируем функциональноDaria Oreshkina
 
Os Reindersfinal
Os ReindersfinalOs Reindersfinal
Os Reindersfinaloscon2007
 
Os Reindersfinal
Os ReindersfinalOs Reindersfinal
Os Reindersfinaloscon2007
 
Programming in Computational Biology
Programming in Computational BiologyProgramming in Computational Biology
Programming in Computational BiologyAtreyiB
 
A Survey of Concurrency Constructs
A Survey of Concurrency ConstructsA Survey of Concurrency Constructs
A Survey of Concurrency ConstructsTed Leung
 
intro unix/linux 03
intro unix/linux 03intro unix/linux 03
intro unix/linux 03duquoi
 
0.5mln packets per second with Erlang
0.5mln packets per second with Erlang0.5mln packets per second with Erlang
0.5mln packets per second with ErlangMaxim Kharchenko
 
Rust All Hands Winter 2011
Rust All Hands Winter 2011Rust All Hands Winter 2011
Rust All Hands Winter 2011Patrick Walton
 
Python for Linux System Administration
Python for Linux System AdministrationPython for Linux System Administration
Python for Linux System Administrationvceder
 

Ähnlich wie Erlang Message Passing Concurrency, For The Win (20)

Erlang, an overview
Erlang, an overviewErlang, an overview
Erlang, an overview
 
Sioux Hot-or-Not: Functional programming: unlocking the real power of multi-c...
Sioux Hot-or-Not: Functional programming: unlocking the real power of multi-c...Sioux Hot-or-Not: Functional programming: unlocking the real power of multi-c...
Sioux Hot-or-Not: Functional programming: unlocking the real power of multi-c...
 
Keynote joearmstrong
Keynote joearmstrongKeynote joearmstrong
Keynote joearmstrong
 
Introduction To Erlang Final
Introduction To Erlang   FinalIntroduction To Erlang   Final
Introduction To Erlang Final
 
Reversing & Malware Analysis Training Part 4 - Assembly Programming Basics
Reversing & Malware Analysis Training Part 4 - Assembly Programming BasicsReversing & Malware Analysis Training Part 4 - Assembly Programming Basics
Reversing & Malware Analysis Training Part 4 - Assembly Programming Basics
 
Diving into Functional Programming
Diving into Functional ProgrammingDiving into Functional Programming
Diving into Functional Programming
 
220 runtime environments
220 runtime environments220 runtime environments
220 runtime environments
 
Bioinformatics v2014 wim_vancriekinge
Bioinformatics v2014 wim_vancriekingeBioinformatics v2014 wim_vancriekinge
Bioinformatics v2014 wim_vancriekinge
 
Лев Валкин — Программируем функционально
Лев Валкин — Программируем функциональноЛев Валкин — Программируем функционально
Лев Валкин — Программируем функционально
 
Elixir introduction
Elixir introductionElixir introduction
Elixir introduction
 
Os Reindersfinal
Os ReindersfinalOs Reindersfinal
Os Reindersfinal
 
Os Reindersfinal
Os ReindersfinalOs Reindersfinal
Os Reindersfinal
 
Erlang session1
Erlang session1Erlang session1
Erlang session1
 
Programming in Computational Biology
Programming in Computational BiologyProgramming in Computational Biology
Programming in Computational Biology
 
A Survey of Concurrency Constructs
A Survey of Concurrency ConstructsA Survey of Concurrency Constructs
A Survey of Concurrency Constructs
 
Erlang OTP
Erlang OTPErlang OTP
Erlang OTP
 
intro unix/linux 03
intro unix/linux 03intro unix/linux 03
intro unix/linux 03
 
0.5mln packets per second with Erlang
0.5mln packets per second with Erlang0.5mln packets per second with Erlang
0.5mln packets per second with Erlang
 
Rust All Hands Winter 2011
Rust All Hands Winter 2011Rust All Hands Winter 2011
Rust All Hands Winter 2011
 
Python for Linux System Administration
Python for Linux System AdministrationPython for Linux System Administration
Python for Linux System Administration
 

Mehr von l xf

Asynchronous Io Programming
Asynchronous Io ProgrammingAsynchronous Io Programming
Asynchronous Io Programmingl xf
 
The Proactor Pattern
The Proactor PatternThe Proactor Pattern
The Proactor Patternl xf
 
Stackless Python In Eve
Stackless Python In EveStackless Python In Eve
Stackless Python In Evel xf
 
The Migration From Erlang To Otp A Case Study Of A Heavy Duty Tcpip Clients...
The Migration From Erlang To Otp   A Case Study Of A Heavy Duty Tcpip Clients...The Migration From Erlang To Otp   A Case Study Of A Heavy Duty Tcpip Clients...
The Migration From Erlang To Otp A Case Study Of A Heavy Duty Tcpip Clients...l xf
 
Concurrency And Erlang
Concurrency And ErlangConcurrency And Erlang
Concurrency And Erlangl xf
 
Learning Erlang And Developing A Sip Server Stack With 30k Potential Users
Learning Erlang And Developing A Sip Server Stack With 30k Potential UsersLearning Erlang And Developing A Sip Server Stack With 30k Potential Users
Learning Erlang And Developing A Sip Server Stack With 30k Potential Usersl xf
 
A Virtual World Distributed Server Developed In Erlang As A Tool For Analysin...
A Virtual World Distributed Server Developed In Erlang As A Tool For Analysin...A Virtual World Distributed Server Developed In Erlang As A Tool For Analysin...
A Virtual World Distributed Server Developed In Erlang As A Tool For Analysin...l xf
 

Mehr von l xf (7)

Asynchronous Io Programming
Asynchronous Io ProgrammingAsynchronous Io Programming
Asynchronous Io Programming
 
The Proactor Pattern
The Proactor PatternThe Proactor Pattern
The Proactor Pattern
 
Stackless Python In Eve
Stackless Python In EveStackless Python In Eve
Stackless Python In Eve
 
The Migration From Erlang To Otp A Case Study Of A Heavy Duty Tcpip Clients...
The Migration From Erlang To Otp   A Case Study Of A Heavy Duty Tcpip Clients...The Migration From Erlang To Otp   A Case Study Of A Heavy Duty Tcpip Clients...
The Migration From Erlang To Otp A Case Study Of A Heavy Duty Tcpip Clients...
 
Concurrency And Erlang
Concurrency And ErlangConcurrency And Erlang
Concurrency And Erlang
 
Learning Erlang And Developing A Sip Server Stack With 30k Potential Users
Learning Erlang And Developing A Sip Server Stack With 30k Potential UsersLearning Erlang And Developing A Sip Server Stack With 30k Potential Users
Learning Erlang And Developing A Sip Server Stack With 30k Potential Users
 
A Virtual World Distributed Server Developed In Erlang As A Tool For Analysin...
A Virtual World Distributed Server Developed In Erlang As A Tool For Analysin...A Virtual World Distributed Server Developed In Erlang As A Tool For Analysin...
A Virtual World Distributed Server Developed In Erlang As A Tool For Analysin...
 

Kürzlich hochgeladen

Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 

Kürzlich hochgeladen (20)

Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 

Erlang Message Passing Concurrency, For The Win

  • 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
  • 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
  • 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(quot;Received:~p~nquot;, [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