Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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