Erlang - MiracleThings

48
Erlang “Software for a concurrent world” CWI Amsterdam Arjan Scherpenisse 14 december 2012 [email protected]

Transcript of Erlang - MiracleThings

Page 1: Erlang - MiracleThings

Erlang

“Software for a concurrent world”

CWI Amsterdam

Arjan Scherpenisse14 december 2012

[email protected]

Page 2: Erlang - MiracleThings

Agenda

● Intro● Language essentials● Concurrency / failure● OTP● VM / GC / optimisations / pitfalls

Page 4: Erlang - MiracleThings
Page 5: Erlang - MiracleThings
Page 6: Erlang - MiracleThings
Page 7: Erlang - MiracleThings

Erlang Philosophy

● The world is concurrent● Things in the world dont share data● Things communicate with messages● Things fail

- Joe Armstrong

Page 8: Erlang - MiracleThings

Language essentials

Page 9: Erlang - MiracleThings
Page 10: Erlang - MiracleThings

Data types

● Integer / float● Atoms● Tuples● Lists● Binaries

… so where are strings?

Page 11: Erlang - MiracleThings

Datatypes (cont)

● Functions● Pids● Ports

Page 12: Erlang - MiracleThings
Page 13: Erlang - MiracleThings
Page 14: Erlang - MiracleThings
Page 15: Erlang - MiracleThings
Page 16: Erlang - MiracleThings
Page 17: Erlang - MiracleThings
Page 18: Erlang - MiracleThings
Page 19: Erlang - MiracleThings
Page 20: Erlang - MiracleThings
Page 21: Erlang - MiracleThings

Concurrency / failure

Page 22: Erlang - MiracleThings

Concurrency

● spawn, spawn_link● !, receive

Page 23: Erlang - MiracleThings
Page 24: Erlang - MiracleThings
Page 25: Erlang - MiracleThings
Page 26: Erlang - MiracleThings
Page 27: Erlang - MiracleThings
Page 28: Erlang - MiracleThings
Page 29: Erlang - MiracleThings
Page 30: Erlang - MiracleThings
Page 31: Erlang - MiracleThings
Page 32: Erlang - MiracleThings
Page 33: Erlang - MiracleThings

Fundamental pieces

Page 34: Erlang - MiracleThings

OTP: Open Telecom Platform

Page 35: Erlang - MiracleThings
Page 36: Erlang - MiracleThings

OTP

● application– Contains independent code, multiple applications

per Erlang node

● supervisor– Supervises worker processes and supervisors

● gen_server– Basic work unit

Page 37: Erlang - MiracleThings

GC / optimisation / pitfalls

Page 38: Erlang - MiracleThings

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 - MiracleThings

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 - MiracleThings

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 - MiracleThings
Page 42: Erlang - MiracleThings
Page 43: Erlang - MiracleThings

Outro

Page 44: Erlang - MiracleThings

What I mainly use it for

● Full-stack web development– http://zotonic.com/

● HA backend systems

Preventing stuff like this → :-)

Page 45: Erlang - MiracleThings
Page 46: Erlang - MiracleThings
Page 47: Erlang - MiracleThings

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)

Page 48: Erlang - MiracleThings

Thanks!

Arjan [email protected]

http://twitter.com/acscherp http://miraclethings.nl/