Non-blocking I/O and how Node uses it, in friendly terms: blocking vs async IO, CPU vs IO

Поділитися
Вставка
  • Опубліковано 11 чер 2024
  • The work of fulfilling a request can be split into two pieces: CPU work, which is actively running code and performing calculations, and I/O work, which is waiting for something else to happen. Normally, threads performing I/O must wait until the I/O is complete to continue processing, which is called blocking or synchronous I/O. Non-blocking or asynchronous I/O is an optimization available in some technologies (NodeJS, Java NIO, and others) that allows threads to move on to other work while the I/O is happening in the background.
    Feel free to ask questions in the comments below!
    00:00 Intro
    00:31 Servers & Threads
    01:28 A Server Is Like A Restaurant
    03:22 A Request Has CPU work (active time) and I/O work (inactive time)
    04:27 Code Example
    05:03 Nonblocking I/O Timing Diagram
    05:29 Blocking I/O Timing Diagram
    06:01 Why Isn't Nonblocking I/O More Common?
    06:47 Downsides Of Nonblocking I/O
    07:42 Recap

КОМЕНТАРІ • 164

  • @amstud
    @amstud 3 роки тому +107

    This is easily the best programming video I've ever seen. You took a subtle and tricky concept (one which I suspect most software engineers don't actually understand), and explained it simply enough that a child could understand. Not to mention excellent production values. Super excited to have found this channel, and I can't wait to see what you make next!

    • @faraitanekha2642
      @faraitanekha2642 2 роки тому +2

      No need for me to leave a comment, then. You've said it perfectly my friend 👍😁

    • @lauraablitt6379
      @lauraablitt6379 2 роки тому

      10000%. Honestly great video - thank you

  • @sepg6266
    @sepg6266 2 роки тому +4

    Great job
    One suggestion: try a background video with less volume, no lyrics (human sound), and slower beats. That music is not just supposed to make the viewer excited or attracted, just makes it a lill colorful. Thanks

  • @fourteensierra
    @fourteensierra 3 роки тому +39

    Thought you did a fantastic job explaining Non-blocking I/O. I was super bummed when I saw you only had two other videos. Makes some more vids!!!

  • @julianhu
    @julianhu 14 днів тому

    This is absolutely the best explanation video about async I've ever seen. Amazing work!

  • @LyadhKhorEngineer
    @LyadhKhorEngineer 3 роки тому +22

    Great video. Cleared up a lot of confusion regarding how javascript works as a single threaded server. 👍🏼

  • @iganic7574
    @iganic7574 2 місяці тому +1

    Great explanation , finally I understood what is non blocking I/O .
    🙌

  • @alaaroumeeh2752
    @alaaroumeeh2752 Рік тому

    Thank you very much no one explains this topic well, or they don't explain it at all!

  • @jordanbtucker
    @jordanbtucker 3 роки тому +11

    Loved the analogies and animations!

  • @RebienKani
    @RebienKani 2 роки тому +10

    Dude amazing video and excellent job on explaining this topic because it was true hassle for me too understand. Just a couple of tips for in the future:
    1: Choose a different music with lower BPM and lower it by 20%
    2: A better microfoon or remove static noise in post production
    For the rest killer video!!!

  • @sid6576
    @sid6576 Рік тому +8

    Just found this video, great work man.
    My 2 cents: I think the conversation about asynchronousity is incomplete without thinking about how threads and context switching are handled at the OS level. Without the concepts of yielding, interrupts and a priority queue for threads, I was confused for the longest on time on how the computer just magically knows when to switch from one task to another and when it knows that an IO task is complete. I feel like the next step after this video would be to tackle scheduling in OSes because I feel like a lot of programmers on the internet find it to be impenetrable when it's really not that hard!

    • @wafikiri_
      @wafikiri_ 8 місяців тому

      I agree. I watched the video expecting a more advanced explanation. I'm currently amateurly designing the scheduler of a multi-tasking processor and wanted to learn of current solutions.

  • @whitebeardpirates7551
    @whitebeardpirates7551 Рік тому

    Man that's HUGE, i finally understand this heavy topic as if it was a piece of cake, you're the GOAT ♥♥ Thanks for your effort ♥

  • @nathanielkswas
    @nathanielkswas 3 роки тому +7

    This was super well presented and produced. Keep up the good work!!

  • @ninthsun
    @ninthsun Рік тому

    Seriously, this video should be the must for every beginner learning nodejs. Super important concept, but in super easy words and animations.

  • @souravsharma6092
    @souravsharma6092 7 місяців тому

    Thank you! Really glad I landed on this video, I don't remember the last time someone explained things as simply and effectively as this. Keep up the good work! Will regularly check your channel for any doubts.

  • @wichaisawangpongkasame9237
    @wichaisawangpongkasame9237 3 роки тому +1

    You're great at explaining things. It's much clearer to me now. Thanks.

  • @asepulven2768
    @asepulven2768 19 днів тому

    Excellent Video! best explanation so far with visual representation.

  • @avgsteve
    @avgsteve 3 роки тому +2

    This is how the knowledge should be taught. Thanks for sharing

  • @dark_lord98
    @dark_lord98 Рік тому +1

    This is the best video I watched regarding the I/O and CPU tasks. The code example cleared many things for me. Thanks a lot man. Please keep making videos on software engineering topics.

  • @brandonhunter2074
    @brandonhunter2074 7 місяців тому

    This is one of the best explanations of this concept I've ever seen. Well done!

  • @vertikasrivastava1186
    @vertikasrivastava1186 3 роки тому +7

    This was super helpful, thank you!

  • @brettwines6812
    @brettwines6812 3 роки тому +1

    wow, each of these is better than the last. Your hard work really shows!!!

  • @Y3arin
    @Y3arin 2 роки тому

    Great work. This is easily the best, clearest explanation of the subject I've seen in a video.

  • @nicholasaine7756
    @nicholasaine7756 2 роки тому

    Best explanation I have come accross, on this topic.

  • @Priyanka-hs5jk
    @Priyanka-hs5jk Рік тому

    This is the most crisp and clear explanation for non blocking I/O in layman terms, thanks a lot

  • @siddharthyadav5066
    @siddharthyadav5066 2 роки тому

    This very well explained the concept with animations and examples. Thanks for the great work

  • @MyAminedz
    @MyAminedz Рік тому

    Absolutely mind-blowing video, hats off to you sir

  • @flucksy119
    @flucksy119 3 роки тому +1

    i think this is the best computer science video ive ever watched with regards to visually understanding due to the graphics

  • @samartajshaikh2601
    @samartajshaikh2601 Рік тому

    Great explanation. Simple and precise. Exactly what I needed. Thanks.

  • @Frozd
    @Frozd Рік тому

    Great video! The explanation was on-point and easy to understand, and the animations made it easy to follow.

  • @yashkumar-jv2cf
    @yashkumar-jv2cf 2 роки тому

    I was struggling with this concept for months. you cleared my doubt. thanks man

  • @dhruvpurwar6642
    @dhruvpurwar6642 2 роки тому

    One of the best videos for the concept!!!

  • @cvramankishore4u
    @cvramankishore4u Рік тому

    Great explanation saw couple of your videos and both are awesome keep up the good work

  • @lgodlike2324
    @lgodlike2324 Рік тому

    You just explain it so well !
    This is exactly the video I need.

  • @ckim0324
    @ckim0324 2 роки тому

    Fantastic video, Alex. Your channel is VERY underrated.

  • @Karpefilm
    @Karpefilm Рік тому

    By far the best explanation! Keep up the fine work

  • @tayyibulhassan6227
    @tayyibulhassan6227 5 місяців тому

    I HAVE NEVER SEEN A BETTER TUTORIAL THAN THIS ONE DUUUUUDDDEEEE, YOU ARE AMAZING!!!

  • @vyasrajjoshi6059
    @vyasrajjoshi6059 2 роки тому

    Very well presented. Waiting for more of such content 😊

  • @teamjupeter9451
    @teamjupeter9451 2 роки тому +1

    What a wonderful lecture on blocking!!

  • @jmro7
    @jmro7 2 роки тому

    top notch content. i can already envision this being a big education channel. Keep it up !

  • @carolinafransiscalopezpaca541

    you make great content, don't stop until the top

  • @ashishchiluka8912
    @ashishchiluka8912 Рік тому

    Great explaination , one of the best videos

  • @muhammadsalikin3886
    @muhammadsalikin3886 2 роки тому +1

    Thank you so much for this video. Best explanation ever !

  • @island_rhythms
    @island_rhythms 7 місяців тому

    This is a treasure! Such a great and simple explanation! Thank you

  • @imaazk
    @imaazk 6 місяців тому

    I usually don't comment. but you really make things very simple to understand. Thank you!

  • @lychenus
    @lychenus 2 роки тому

    very decently explained. now i understand when to pick a (non-)blocking io framework

  • @karthiks-he4wh
    @karthiks-he4wh Рік тому

    Beautifully explained 👌

  • @arjunbhat6502
    @arjunbhat6502 3 роки тому

    Keep on doing such kind of videos. That really helped.

  • @rolandvarga3912
    @rolandvarga3912 9 днів тому

    dude, make more videos! Such high quality stuff 👏

  • @minhtaile3572
    @minhtaile3572 3 роки тому +1

    Thanks for making this video, it's easy to understand

  • @congdao7484
    @congdao7484 3 роки тому +2

    Good work, hope you have more similar video.

  • @Finn-jp6pn
    @Finn-jp6pn 3 роки тому +1

    Found this on Reddit. This was really helpful. Thanks 👍

  • @jokercry8132
    @jokercry8132 2 роки тому

    Wow! Explanation is so good with the graph.

  • @georgemarwanqana3478
    @georgemarwanqana3478 Рік тому

    BEST EXPLANATION OF THE YEAR

  • @ShaikSameer549
    @ShaikSameer549 2 роки тому

    Thanks for making it simple and more understandable

  • @sandeepkosta5750
    @sandeepkosta5750 Рік тому

    I just wanted to break the like button by clicking on it many times.
    What a great explaination sir
    Thanks so much

  • @zlw8844
    @zlw8844 2 роки тому

    Very top notch quality!

  • @mars_bold
    @mars_bold Рік тому

    BROTHER, YOU ARE THE BEST!!! You oooh really helped me!! THANK YOU VERY MUCH!This is cool, well done!

  • @utkarshtripathi2349
    @utkarshtripathi2349 2 роки тому

    Best explanation, Thanks for the video

  • @ainharansubramaniam2910
    @ainharansubramaniam2910 3 роки тому +1

    Great video I hope you keep them coming

  • @teerapatprommarak2070
    @teerapatprommarak2070 3 роки тому +1

    Fantastic video! Thank you Alex

  • @morphos2
    @morphos2 Рік тому

    Bravo!!! Excellent explanation!! 👏👏👏

  • @Juan_lauretta
    @Juan_lauretta 2 роки тому

    Wow this video was amazing, thank you so much

  • @salvadorgonzales1566
    @salvadorgonzales1566 3 роки тому

    Wow you did very good on this video! well explained! hope you make many more on all topics lol

  • @cuongtrinhminh
    @cuongtrinhminh 2 роки тому

    Great video because it explains a hard thing simple

  • @aramaiskhachatryan553
    @aramaiskhachatryan553 3 роки тому +1

    Great one! Keep it up Alex.

  • @janetspellman3945
    @janetspellman3945 Рік тому

    Thanks so much, this was super helpful!

  • @flavioneto1081
    @flavioneto1081 3 роки тому

    Great video and animations, very explicative, thank you

  • @vunu.
    @vunu. 3 роки тому

    Your voice is perfect for these videos! You've come so far in the last decade, awesome stuff! Works like clockwork...wink wink nudge nudge. Anyway, I enjoyed this. I'm subscribing and hitting the bell!

  • @icns01
    @icns01 2 роки тому

    It was super helpful. Thanks much for clarifying.

  • @arnabgoswami8971
    @arnabgoswami8971 3 роки тому

    Thanks you so much for the wonderful explanation It really helped me clearing the concept

  • @fahad_hassan_92
    @fahad_hassan_92 10 місяців тому

    Great video Alex thanks!

  • @yooog
    @yooog 3 роки тому +1

    Excellent explanation!

  • @saurabh95mishra
    @saurabh95mishra Рік тому

    amazing explanation, I learned redis uses similar model as nodejs, would love your video on that!

  • @mandaputtra
    @mandaputtra Рік тому +1

    Thanks, all of your video are easily digested! Maybe you can decrease the background music volume to 10% or 20%.

  • @user-gc4xs1qy1o
    @user-gc4xs1qy1o Рік тому

    nice explanation! Thank you! Alex!

  • @Belkiii88
    @Belkiii88 2 роки тому

    Really great video!

  • @saurabh0241
    @saurabh0241 7 місяців тому

    thank you soo much for this video brother . love from INDIA

  • @mohamedchebbi1154
    @mohamedchebbi1154 2 роки тому

    That's huge, great job, u saved my life.

  • @dmitry027
    @dmitry027 Рік тому

    Great explanation!

  • @henriquesenadev2194
    @henriquesenadev2194 10 місяців тому

    Incredible video!

  • @theace9562
    @theace9562 3 роки тому +2

    Super helpful. Thanks

  • @oladipupooladele3647
    @oladipupooladele3647 Рік тому

    Great video!!!!! i loved it so much

  • @idanqwe1
    @idanqwe1 3 роки тому

    Great explanation! Thank you.

  • @howards5205
    @howards5205 Рік тому

    This is the best explanation I've seen on non-blocking I/O. Thank you SOOOO much for this video! It clarified so many questions I had.
    @4:20 of your video, you listed three examples of I/O (inactive time):
    - reading from filesystem
    - making network requests
    - waiting for time to pass
    Would executing a long-running database query qualify as a I/O or CPU? The database would be doing all the heavy compute. Would NodeJS be able to move onto other active tasks while the database query is running? Or will a thread be tied to the database query?

  • @waniarifrasool
    @waniarifrasool Рік тому

    This is wonderful!

  • @raimundoladrondeguevara8597

    Thank you so much for this video.

  • @michaelciyke
    @michaelciyke 2 роки тому

    awesome explanation!

  • @ayushmanvashishtha8180
    @ayushmanvashishtha8180 2 роки тому

    Great video man

  • @ytrkptl
    @ytrkptl 3 роки тому +1

    Great explanation.

  • @t2a392
    @t2a392 Рік тому

    Amazing video !

  • @DharanAditya
    @DharanAditya Рік тому

    Thanks for the video ❤

  • @user-nh2xc6rd5c
    @user-nh2xc6rd5c 2 роки тому

    awesome video bro!

  • @dkevin1553
    @dkevin1553 2 роки тому

    Awesome Video Bro❤️❤️

  • @afshinshoja2026
    @afshinshoja2026 2 роки тому

    Great video, Thanks

  • @prabhat9274
    @prabhat9274 3 місяці тому

    great explanation...

  • @neilclay5835
    @neilclay5835 Рік тому

    Well explained.

  • @randomguy59420
    @randomguy59420 3 роки тому +1

    awesome, well done!

  • @vishnuprabuselvaraj9795
    @vishnuprabuselvaraj9795 Рік тому

    Nice explaination

  • @xtremewolve
    @xtremewolve 2 роки тому

    too good, I am subscribing

  • @mohamedsharkawey3847
    @mohamedsharkawey3847 3 роки тому

    that's a nice one mate thank you!