Your SlideShare is downloading. ×
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Don’t block the event loop!
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Don’t block the event loop!

2,023

Published on

Don’t block the event loop! …

Don’t block the event loop!

EventMachine: Scalable non-blocking i/o in ruby

Published in: Technology
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,023
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
23
Comments
0
Likes
9
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Transcript

    • 1. Don’t block the event loop! EventMachine: Scalable non-blocking i/o in ruby
    • 2. Jinpu Hu (胡金埔)Blog: http://hujinpu.com/Github: https://github.com/hujinpuTwitter: https://twitter.com/#!/hujinpuSina weibo: http://weibo.com/hujinpuEmail: hujinpu@gmail.com
    • 3. Blocking IO sucks
    • 4. Evented IO rules
    • 5. CXXXK problem
    • 6. CXXXK problemRPS(QPS/TPS)TPRConcurrency Level
    • 7. Efficient Processing Focus on maximizing machine utilization Google tries for ~80% utilization
    • 8. Different non blocking i/o asynchronous programming
    • 9. • Blocking IO a UNIVERSAL problem• All programming languages have trouble with it• The Reactor pattern resolves it• Most languages have the Reactor pattern! JavaScript Node.js Python Twisted Ruby EventMachine Java MINA Lua LuaNode
    • 10. Reactor PatternWhat’s reactor?What’s design patterns?So, what’s reactor pattern?
    • 11. reactor reactor is simply a single thread, endless loop It reacts to incoming events
    • 12. design patternshttp://en.wikipedia.org/wiki/Pattern
    • 13. reactor pattern resources (description/file handler) synchronous event demultiplexer (select/epoll/kqueue) dispatcher request handler
    • 14. What’s eventmachine?Ruby implementation of the Reactor patternSingle threaded by defaultAllows us to interleave multiple IO ops and a singleCPU op simultaneously
    • 15. Let’s play with EM gem install eventmachine --pre
    • 16. EM.runtakes a block to execute once the reactor has startedEM.run is blockingthe loop takes over the ruby process, so code afterEM.run will not runall your code(relative to em) must in EM.run
    • 17. EM.next_tickqueue a proc to be executed on the next iteration ofthe reactor loop
    • 18. EM.tick_loop 80k+/s on my mac air
    • 19. EM::Iterator That’s cool for writing crawler
    • 20. EM.deferon first invocation, spawns up EM.threadpool_sizethreads in a poolall the threads read procs from a queue and executethem in parallel to the reactor threadoptional second proc is invoked with the result of thefirst proc, but back inside the reactor thread
    • 21. EM::Timer
    • 22. EM::Queueasync queueif queue is empty, it is invoked when someone calls#push
    • 23. EM::Channel
    • 24. EM.system
    • 25. Network Servers and ClientsEM.start_server / EM.stop_serverEM.connect / EM.bind_connectEM.open_datagram_socket
    • 26. TCP is stream
    • 27. And moreread eventmachine source code!
    • 28. Callback Hellvar useFile = function(filename,callback){    posix.stat(filename).addCallback(function (stats) {        posix.open(filename, process.O_RDONLY, 0666).addCallback(function (fd) {            posix.read(fd, stats.size, 0).addCallback(function(contents){                callback(contents);            });        });    });};
    • 29. Fiber What’s fiber? How to use fiber?
    • 30. what’s fiber light weight cooperative concurrency the scheduling must be done by the programmer and not the VM a small 4KB stack
    • 31. use fiber http://ruby-doc.org/core-1.9.3/Fiber.html
    • 32. Solotion to callback hell Fiber into EM = em-synchrony thanks to Ilya Grigorik(CTO of PostRank)
    • 33. The End

    ×