anna + hannah #aboutus...3/18/2019 spectacle boilerplate 1/ 87 anna neyzberg @aneyzb she/her hannah...

87
3/18/2019 Spectacle Boilerplate http://localhost:3000/#/?export 1/87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com hannah@ca rbonve.co m ANNA + HANNAH #ABOUTUS

Upload: others

Post on 11-Jul-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 1/87

AnnaNeyzberg @Aneyzb she/her

Hannah Howard @techgirlwonder

she/her

anna@carbon�ve.com

hannah@carbon�ve.co

m

ANNA + HANNAH #ABOUTUS

Page 2: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 2/87

GO VS. ELIXIR

A Concurrency Comparison

Page 3: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 3/87

Page 4: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 4/87

Page 5: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 5/87

Page 6: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 6/87

Page 7: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 7/87

Page 8: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 8/87

Page 9: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 9/87

Page 10: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 10/87

BUT WE ALSOHAVE

Page 11: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 11/87

Page 12: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 12/87

Page 13: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 13/87

SO HOW ISTHIS

RELEVANT?

Page 14: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 14/87

Page 15: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 15/87

“Concurrency isthe composition of

independentlyexecuting

processes, whileparallelism is the

simultaneousexecution of

computations“-

Page 16: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 16/87

PARALLELISMIS ABOUT

EXECUTINGMANY THINGSAT ONCE. IT'S

FOCUS ISEXECUTION

Page 17: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 17/87

CONCURRENCYIS ABOUT

DEALING WITHMANY THINGSAT ONCE. IT'S

FOCUS ISSTRUCTURE

Page 18: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 18/87

THIS REQUIRESCOORDINATION

Page 19: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 19/87

COORDINATIONINTRODUCES

COMPLEXITY...

Page 20: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 20/87

HOW DO WE

COORDINATEBETWEEN

TASKSWORKING

TOGETHER?

Page 21: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 21/87

THE PROBLEM

Concurrency Without Coordination

Page 22: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 22/87

THREADS COORDINATE BYSHARING DATA

Use same memory spaceUse mutation on shared state to

communicateUse various locks to prevent

overwriting each others work

Page 23: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 23/87

THREADS

Old School Concurrency

Page 24: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 24/87

MOST WIDELY

USEDPROGRAMMING

LANGUAGESSUPPORTTHREADS.

Page 25: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 25/87

MO THREADS

Mo Problems

Page 26: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 26/87

CHALLENGES WITHTHREADS

1. Lots of shared mutable state2. Dead locks / unpredictabiity3. Expontential complexity to manage

Page 27: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 27/87

THE ACTORMODEL

Page 28: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 28/87

INVENTED BYCARL HEWITT

1973

Page 29: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 29/87

ERLANGCREATED IN

1986

Page 30: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 30/87

CONCEPTUALMODEL TODEAL WITH

CONCURRENTCOMPUTATION

Page 31: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 31/87

DEFINESSOME

GENERALRULES FOR

HOW THESYSTEM’S

COMPONENTSSHOULD

BEHAVE ANDINTERACT

WITH EACHOTHER

Page 32: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 32/87

Page 33: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 33/87

One ant is no ant.- https://www.brianstorti.com/the-actor-model/

Page 34: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 34/87

Page 35: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 35/87

Page 36: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 36/87

Page 37: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 37/87

PROCCESSES1. Are not OS processes2. Light weight3. Do not share memory4. Have a unique ID

Page 38: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 38/87

THE ACTORMODEL IS

PHYSICALLYBASED

Page 39: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 39/87

Page 40: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 40/87

Page 41: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 41/87

DISTRIBUTEDELIXIR

Page 42: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 42/87

LET IT CRASH

Page 43: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 43/87

Page 44: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 44/87

Page 45: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 45/87

THE BEAM

Page 46: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 46/87

PREEMPTIVESCHEDULING

Page 47: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 47/87

Page 48: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 48/87

ELIXIR PRIORITIES1. Scalable2. Fault Tolerant (Telco Strong)3. Fast

Page 49: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 49/87

GO AND CSP

Page 50: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 50/87

CSP:Communicating Sequential Processes

Page 51: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 51/87

PROCESS

Page 52: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 52/87

CSP PROCESS != OS PROCESS

Page 53: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 53/87

CHANNELS

Page 54: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 54/87

PROCESSESKNOW

CHANNELS,NOT OTHERPROCESSES

Page 55: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 55/87

Processes choose behavior by listeningon multiple channels

CHOICE:

Page 56: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 56/87

LOOKING AT CSP IN GO

Page 57: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 57/87

1. package main 2. 3. import "fmt" 4. 5. func read(incoming <-chan string, done chan<- struct{}) { 6. readValue := <-incoming 7. fmt.Printf("%s\n", readValue) 8. done <- struct{}{} 9. } 10. 11. func write(outgoing chan<- string, done chan<- struct{}) {12. outgoing <- "bananas"

Wait for both to complete

Page 58: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 58/87

SYNCHRONOUSCHANNELS =

COORDINATION

Page 59: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 59/87

Choice in Go with select!

Page 60: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 60/87

HOW GO IMPLEMENTS CSP

Page 61: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 61/87

A goroutine is alightweight thread

managed by the Goruntime.

- Of�cial Tour Of Go

Page 62: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 62/87

*stares Britnely*

GOROUTINES SHARE MEMORY

Page 63: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 63/87

BUT WAIT THERE'S MORE...

Page 64: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 64/87

Sync Package:

ALL THETHREAD SYNCPRIMITIVES, IN

GO!

Page 65: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 65/87

Do notcommunicate bysharing memory;

instead, sharememory by

communicating.- Go Docs

Page 66: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 66/87

This approach can be taken toofar. Reference counts may bebest done by putting a mutex

around an integer variable, forinstance. But as a high-levelapproach, using channels to

control access makes it easierto write clear, correct programs.

- Also Go Docs

Page 67: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 67/87

Other Go Fun Fact:GO ROUTINES ARE SCHEDULED COOPERATIVELY!

Page 68: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 68/87

WTF GO?

Page 69: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 69/87

GO COMPILES TO NATIVE CODE

Page 70: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 70/87

GO RUN-TIME IS SMALL (2MB)

Page 71: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 71/87

GO IS (ALMOST) A SYSTEMS PROGRAMMING LANGUAGE

Page 72: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 72/87

GO PRIORITIES1. Ease of adoption2. Speed3. Flexibility

Page 73: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 73/87

CSP VS ACTOR MODEL

Page 74: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 74/87

CSP AND ACTOR MODELSIMILARITIES

1. Abstract 'processes' managed byruntime2. Share data bycommunicating/message passing

Page 75: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 75/87

Erlang's syntaxderived from

Prolog and washeavily in�uencedby smalltalk, CSP

and the functionalprogramming.

- Joe Armstrong, Erlang Creator

Page 76: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 76/87

Difference #1:

PROCESSIDENTITY

Page 77: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 77/87

Difference #2:

DIRECTCOMMUNICATION

VS CHANNELS

Page 78: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 78/87

Difference #3:

ASYNCHRONOUSVS

SYNCHRONOUSMESSAGEPASSING

Page 79: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 79/87

NO SO DIFFERENT AFTER ALL?

Page 80: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 80/87

HOW TO GIVE CSPPROCESS AN IDENTITY

1 CSP channel+ 1 CSP Process Reading From Channel= Channel Becomes De-facto Identity

Page 81: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 81/87

HOW TO PASS CSPMESSAGES

ASYNCHRONOUSLYMessage Queue Process+ Channel For Sending+ Channel For Receiving= Asynchronous Message Passing

Page 82: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 82/87

https://medium.com/capital-one-tech/building-an-unbounded-channel-in-

go-789e175cd2cd

BUILDING AN UNBOUNDED CHANNEL IN GO:

Page 83: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 83/87

A GenServer in Go!

1. package counter 2. 3. type counterMessage interface { 4. handle(c * Counter) 5. } 6. 7. type Counter struct { 8. counterMessages chan counterMessage 9. 10. // do not touch outside run loop 11. value int

Page 84: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 84/87

HOW DO WE IMPLEMENT CHANNELS IN ELIXIR?:

Page 85: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 85/87

12. { queue, len, :unbuffered } ->

1. defmodule ElixirConurrency.Queue do 2. def new(max_size) do 3. { :queue.new, 0, max_size } 4. end 5. 6. def new(:unbuffered) do 7. { :queue.new, 0, :unbuffered } 8. end 9. 10. def put(bounded_queue, item ) do 11. case bounded_queue do

13. queue = :queue.in(item, queue) 14. {{:ok, queue }, len + 1} 15. { queue, len, max_size } -> 16. if len == max_size do 17. {:buffered, queue}

if queue unbuffered

Page 86: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 86/87

CONCLUSIONS

Page 87: ANNA + HANNAH #ABOUTUS...3/18/2019 Spectacle Boilerplate  1/ 87 Anna Neyzberg @Aneyzb she/her Hannah Howard @techgirlwonder she/her anna@carb onve.com3/18/2019

3/18/2019 Spectacle Boilerplate

http://localhost:3000/#/?export 87/87

http://concurrency.techgirlwonder.com

THANK YOU!