Slide 1

Slide 1 text

config.threadsafe! JUST DO IT Tony Arcieri RailsConf 2012 Wednesday, April 25, 12

Slide 2

Slide 2 text

Most Rails apps can only do one thing at a time Wednesday, April 25, 12

Slide 3

Slide 3 text

BAD Wednesday, April 25, 12

Slide 4

Slide 4 text

48(5< 5(48(67 '% 5(63216( Wednesday, April 25, 12

Slide 5

Slide 5 text

48(5< 5(48(67 '% 5(63216( Wednesday, April 25, 12

Slide 6

Slide 6 text

DB Queries = Wasted Time Wednesday, April 25, 12

Slide 7

Slide 7 text

Wednesday, April 25, 12

Slide 8

Slide 8 text

Rails CAN do more than one thing at a time (since Rails 2.2) Wednesday, April 25, 12

Slide 9

Slide 9 text

THREADS Wednesday, April 25, 12

Slide 10

Slide 10 text

# Enable threaded mode # config.threadsafe! config/environments/production.rb Wednesday, April 25, 12

Slide 11

Slide 11 text

# Enable threaded mode config.threadsafe! config/environments/production.rb Wednesday, April 25, 12

Slide 12

Slide 12 text

DONE Wednesday, April 25, 12

Slide 13

Slide 13 text

Curious Suspicious How Rubyists See Threads Wednesday, April 25, 12

Slide 14

Slide 14 text

“I don’t want to have to deal with concurrency” Wednesday, April 25, 12

Slide 15

Slide 15 text

TOO LATE Wednesday, April 25, 12

Slide 16

Slide 16 text

Concurrency: You’re already doing it User.transaction do ... end Wednesday, April 25, 12

Slide 17

Slide 17 text

Your DB uses threads* Your app should too *If it doesn’t, it probably sucks Wednesday, April 25, 12

Slide 18

Slide 18 text

'% One VM, Multiple Requests Wednesday, April 25, 12

Slide 19

Slide 19 text

Won’t the GIL get in the way? Wednesday, April 25, 12

Slide 20

Slide 20 text

NO Wednesday, April 25, 12

Slide 21

Slide 21 text

I/O automatically releases the GIL Wednesday, April 25, 12

Slide 22

Slide 22 text

C extensions can release the GIL too Wednesday, April 25, 12

Slide 23

Slide 23 text

“Are my gems thread-safe?” Wednesday, April 25, 12

Slide 24

Slide 24 text

Wednesday, April 25, 12

Slide 25

Slide 25 text

lib/ can be a pain Eager Loading Wednesday, April 25, 12

Slide 26

Slide 26 text

class HerpDerper < ActiveRecord::Base include ThingFrobber end Wednesday, April 25, 12

Slide 27

Slide 27 text

app/models/herp_derper.rb:2:in `': uninitialized constant HerpDerper::ThingFrobber (NameError) from app/models/herp_derper.rb:1:in `' Wednesday, April 25, 12

Slide 28

Slide 28 text

Wednesday, April 25, 12

Slide 29

Slide 29 text

Wednesday, April 25, 12

Slide 30

Slide 30 text

Require your dependencies with require_dependency Wednesday, April 25, 12

Slide 31

Slide 31 text

require_dependency 'thing_frobber' class HerpDerper < ActiveRecord::Base include ThingFrobber end Wednesday, April 25, 12

Slide 32

Slide 32 text

Wednesday, April 25, 12

Slide 33

Slide 33 text

Multicore Wednesday, April 25, 12

Slide 34

Slide 34 text

Multicore Is The Future Wednesday, April 25, 12

Slide 35

Slide 35 text

AMD Bulldozer 1 CPU = 16 Cores Wednesday, April 25, 12

Slide 36

Slide 36 text

Why run N VMs when you could run just 1? Wednesday, April 25, 12

Slide 37

Slide 37 text

•Higher Throughput •Pool Resources •Save Memory Threads are more efficient Wednesday, April 25, 12

Slide 38

Slide 38 text

Rubinius Ruby without a GIL! Multicore parallelism! Wednesday, April 25, 12

Slide 39

Slide 39 text

My dream for Rails 4... Wednesday, April 25, 12

Slide 40

Slide 40 text

# Enable threaded mode config.threadsafe! Thread Safe by Default Wednesday, April 25, 12

Slide 41

Slide 41 text

Thanks! Wednesday, April 25, 12

Slide 42

Slide 42 text

Twitter: @bascule Celluloid: celluloid.io Blog: unlimitednovelty.com Wednesday, April 25, 12