Erlang: Software for a Concurrent world
description
Transcript of Erlang: Software for a Concurrent world
![Page 1: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/1.jpg)
Erlang
“Software for a concurrent world”
CWI Amsterdam
Arjan Scherpenisse14 december 2012
![Page 2: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/2.jpg)
Agenda
● Intro● Language essentials● Concurrency / failure● OTP● VM / GC / optimisations / pitfalls
![Page 4: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/4.jpg)
![Page 5: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/5.jpg)
![Page 6: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/6.jpg)
![Page 7: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/7.jpg)
Erlang Philosophy
● The world is concurrent● Things in the world dont share data● Things communicate with messages● Things fail
- Joe Armstrong
![Page 8: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/8.jpg)
Language essentials
![Page 9: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/9.jpg)
![Page 10: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/10.jpg)
Data types
● Integer / float● Atoms● Tuples● Lists● Binaries
… so where are strings?
![Page 11: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/11.jpg)
Datatypes (cont)
● Functions● Pids● Ports
![Page 12: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/12.jpg)
![Page 13: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/13.jpg)
![Page 14: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/14.jpg)
![Page 15: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/15.jpg)
![Page 16: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/16.jpg)
![Page 17: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/17.jpg)
![Page 18: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/18.jpg)
![Page 19: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/19.jpg)
![Page 20: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/20.jpg)
![Page 21: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/21.jpg)
Concurrency / failure
![Page 22: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/22.jpg)
Concurrency
● spawn, spawn_link● !, receive
![Page 23: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/23.jpg)
![Page 24: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/24.jpg)
![Page 25: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/25.jpg)
![Page 26: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/26.jpg)
![Page 27: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/27.jpg)
![Page 28: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/28.jpg)
![Page 29: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/29.jpg)
![Page 30: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/30.jpg)
![Page 31: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/31.jpg)
![Page 32: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/32.jpg)
![Page 33: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/33.jpg)
Fundamental pieces
![Page 34: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/34.jpg)
OTP: Open Telecom Platform
![Page 35: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/35.jpg)
![Page 36: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/36.jpg)
OTP
● application– Contains independent code, multiple applications
per Erlang node
● supervisor– Supervises worker processes and supervisors
● gen_server– Basic work unit
![Page 37: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/37.jpg)
GC / optimisation / pitfalls
![Page 38: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/38.jpg)
Performance
● Processes are cheap● Data copying is expensive● Handle much of request in single process● Cache locally in process dict● Reduce size of messages● Bigger binaries (> 64 bytes) are shared and reference
counted, make use of them.● String processing is expensive● Keep eye on process inboxes
![Page 39: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/39.jpg)
Garbage Collection
● per process, no global gc sweep = no locking of vm
● can specify per-process initial heap size● prevent big GCs
● keep big data outside process● or in process dict● large binaries = external, use refcounting
![Page 40: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/40.jpg)
Common Pitfalls
● Message inbox overflowing● Atom table injection / crash● VM tweaks needed for
– nr of open file descriptors
– nr of processes
– heap size
![Page 41: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/41.jpg)
![Page 42: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/42.jpg)
![Page 43: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/43.jpg)
Outro
![Page 44: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/44.jpg)
What I mainly use it for
● Full-stack web development– http://zotonic.com/
● HA backend systems
Preventing stuff like this → :-)
![Page 45: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/45.jpg)
![Page 46: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/46.jpg)
![Page 47: Erlang: Software for a Concurrent world](https://reader033.fdocuments.us/reader033/viewer/2022060200/559929b71a28ab40298b4725/html5/thumbnails/47.jpg)
Sources of Inspiration
● Erlang - the ghetto
● Intro to erlang (slideshare)
● Erlang - message passing concurrency (slideshare)
● Erlang concepts (slideshare)
● Concurrency and Paralellism in Erlang (hopkins univ)