The Battle of the Event Loops Copy 2

The Battle of the Event Loops Copy 2

The battle of the event loops Ujjwal Sharma (@ryzokuken) featuring Olga Kobets (@homyasusina) 1 Ujjwal Sharma (he/him) • Compilers Hacker at Igalia • Node.js Core Collaborator • TC39 Delegate • Work on V8 and Cranelift (Spidermonkey/wasmtime) • Student • Speaker 2 @ryzokuken ft. @homyasusina Барсик B1000 3 @ryzokuken ft. @homyasusina The event loop has to be one of the most talked about subjects in JavaScript 4 @ryzokuken ft. @homyasusina Let’s dig a little deeper. 5 @ryzokuken ft. @homyasusina Section I Concurrency 6 @ryzokuken ft. @homyasusina Concurrency vs Parallelism Concurrency 7 @ryzokuken ft. @homyasusina Concurrency /kənˈkʌr(ə)nsi/ noun When two or more tasks can start, run, and complete in overlapping time periods. Concurrency 8 @ryzokuken ft. @homyasusina Example: multitasking on a single-core machine Concurrency 9 @ryzokuken ft. @homyasusina Concurrency 10 @ryzokuken ft. @homyasusina Parallelism /ˈparəlɛlɪzəm/ noun The state of being parallel or of corresponding in some way. Concurrency 11 @ryzokuken ft. @homyasusina Example: the Greek thinkers used to believe in the parallelism of microcosm and macrocosm Concurrency 12 @ryzokuken ft. @homyasusina � Concurrency 13 @ryzokuken ft. @homyasusina Parallelism /ˈparəlɛlɪzəm/ noun When tasks literally run at the same time. Concurrency 14 @ryzokuken ft. @homyasusina Example: a multicore processor Concurrency 15 @ryzokuken ft. @homyasusina Concurrency 16 @ryzokuken ft. @homyasusina If computation is said to be concurrent, then it doesn't necessarily dictate how the concurrency is achieved under the hood. Concurrency 17 @ryzokuken ft. @homyasusina JavaScript is single-threaded Concurrency 18 @ryzokuken ft. @homyasusina V8 is single-threaded Concurrency 19 @ryzokuken ft. @homyasusina “There are many who pretend to despise and belittle that which is beyond their reach.” – Aesop (Aesop’s Fables) Concurrency 20 @ryzokuken ft. @homyasusina JavaScript does not need multithreading Concurrency 21 @ryzokuken ft. @homyasusina Two main reasons for operations to be time-consuming: 1. Operations that perform heavy computation. 2. Operations that depend on something. Concurrency 22 @ryzokuken ft. @homyasusina Two main reasons for operations to be time-consuming: 1. Operations that require CPU time. 1. Operations that perform heavy computation. 2. Operations that wait for something. 2. Operations that depend on something. Concurrency 23 @ryzokuken ft. @homyasusina 99% of all applications do nothing 99% of the time Concurrency 24 @ryzokuken ft. @homyasusina Multithreading is useful when 1. Significant CPU time is required. 2. Need to call an awkward synchronous (blocking) API. Concurrency 25 @ryzokuken ft. @homyasusina Node.js const cluster = require("cluster") const workers = require("worker_threads") Concurrency 26 @ryzokuken ft. @homyasusina Deno const worker = new Worker(...) Concurrency 27 @ryzokuken ft. @homyasusina So how do you use single-threaded concurrency in the real world? Concurrency 28 @ryzokuken ft. @homyasusina Section II Asynchronous Programming 29 @ryzokuken ft. @homyasusina Asynchrony /eɪˈsɪŋ krəˌni/ noun The occurrence of events independent of the main program flow and ways to deal with such events. Asynchronous Programming 30 @ryzokuken ft. @homyasusina Event-driven programming is by far the most popular paradigm to achieve asynchrony Asynchronous Programming 31 @ryzokuken ft. @homyasusina Green Threads is a popular alternative Asynchronous Programming 32 @ryzokuken ft. @homyasusina We’re not the first ones to use event-driven systems to build web servers Asynchronous Programming 33 @ryzokuken ft. @homyasusina • .NET (C#) • Spark (Java) • Twisted (Python) • Express (JavaScript) • Vapor (Swift) • Rocket (Rust) Asynchronous Programming 34 @ryzokuken ft. @homyasusina JavaScript has a concurrency model based on an event loop Asynchronous Programming 35 @ryzokuken ft. @homyasusina Asynchronous Programming 36 @ryzokuken ft. @homyasusina What the heck is the event loop anyway? | Philip Roberts | JSConf EU Asynchronous Programming 37 @ryzokuken ft. @homyasusina Иван Тулуп: асинхронщина в JS под капотом / Михаил Башуров (Luxoft) Asynchronous Programming 38 @ryzokuken ft. @homyasusina But the “event loop” is a theoretical model Asynchronous Programming 39 @ryzokuken ft. @homyasusina Section III Event Loops 40 @ryzokuken ft. @homyasusina poll and select • History: Introduced in the ~80s-90s (old). • Functionality: More or less the same (boring). • Speed: Perform similarly on benchmarks (slow). 1983 • Portability: Everywhere (nice). • Complexity: As simple as it gets (neat). Event Loops 41 @ryzokuken ft. @homyasusina Result: libevent 2000 Event Loops 42 @ryzokuken ft. @homyasusina People loved poll • epoll • /dev/poll • kqueue • pollset • inotify Event Loops 43 @ryzokuken ft. @homyasusina Result: libevent 2003 Event Loops 44 @ryzokuken ft. @homyasusina Result: libevent* 2005 * Slightly Faster Event Loops 45 @ryzokuken ft. @homyasusina Problem: libevent is too… Event Loops 46 @ryzokuken ft. @homyasusina Problem: libevent is too… bloated Event Loops 47 @ryzokuken ft. @homyasusina Result: libev 2007 Event Loops 48 @ryzokuken ft. @homyasusina Event Loops 49 @ryzokuken ft. @homyasusina Node Standard Library Node Bindings Thread Pool Event Loop V8 (libeio) (libev) Event Loops 50 @ryzokuken ft. @homyasusina Narrator: There was a problem. Event Loops 51 @ryzokuken ft. @homyasusina Event Loops 52 @ryzokuken ft. @homyasusina Enter the Dragon Event Loops 53 @ryzokuken ft. @homyasusina Enter the Unicorn Velociraptor 2013 Event Loops 54 @ryzokuken ft. @homyasusina Event Loops 55 @ryzokuken ft. @homyasusina LXJS 2012 - Bert Belder - libuv Event Loops 56 @ryzokuken ft. @homyasusina Node Standard Library Node Bindings Thread Pool Event Loop V8 (libeio) (libev) Event Loops 57 @ryzokuken ft. @homyasusina Node Standard Library Node Bindings V8 libuv Event Loops 58 @ryzokuken ft. @homyasusina Event Loops 59 @ryzokuken ft. @homyasusina Section IV Into the boxing ring 60 @ryzokuken ft. @homyasusina The lifesaver: autocannon • wrk and wrk2 • “It’s just JavaScript” • “It just works” • mcollina is a legend • TCP? • Fake TCP? Into the boxing ring 61 @ryzokuken ft. @homyasusina Introducing gandiva Into the boxing ring 62 @ryzokuken ft. @homyasusina Let the benchmarking begin! Into the boxing ring 63 @ryzokuken ft. @homyasusina Section V Conclusion 64 @ryzokuken ft. @homyasusina Conclusion 1: tokio is slow Conclusion 65 @ryzokuken ft. @homyasusina Conclusion 66 @ryzokuken ft. @homyasusina Conclusion 2: deno is slow Conclusion 67 @ryzokuken ft. @homyasusina Deno's design is different than Node's in that all native calls are done through zero-copy message passing. This allows for a more uniform bindings, where we have centralised understanding of all calls being made out of the VM. – Ryan Dahl Conclusion 68 @ryzokuken ft. @homyasusina Ultimately we expect this design to result in better performance, but we're not there yet. Deno's networking is about 50% the speed of Node v13. Follow our progress at https:// deno.land/benchmarks – Ryan Dahl Conclusion 69 @ryzokuken ft. @homyasusina Conclusion 3: people are still reluctant Conclusion 70 @ryzokuken ft. @homyasusina Conclusion 71 @ryzokuken ft. @homyasusina But it’s getting there! Conclusion 72 @ryzokuken ft. @homyasusina Introducing Deno 1.0 Conclusion 73 @ryzokuken ft. @homyasusina Special Thanks • Artem Kobzar • Ryan Dahl • Olga Kobets • Kamil Mysliwiec Conclusion 74 @ryzokuken ft. @homyasusina спасибо! Conclusion 75 @ryzokuken ft. @homyasusina.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    75 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us