美文网首页
NodeJS单线程为什么可以实现并发

NodeJS单线程为什么可以实现并发

作者: Poppy11 | 来源:发表于2020-11-28 14:09 被阅读0次

事件驱动/事件循环

nodejs所谓的单线程,只是主线程是单线程,通过事件循环(event loop)来实现并发操作

  • 1、每个Node.js进程只有一个主线程在执行程序代码,形成一个执行栈(execution context stack)。
  • 2、主线程之外,还维护了一个"事件队列"(Event queue)。当用户的网络请求或者其它的异步操作到来时,node都会把它放到Event Queue之中,此时并不会立即执行它,代码也不会被阻塞,继续往下走,直到主线程代码执行完毕。
  • 3、主线程代码执行完毕完成后,然后通过Event Loop,也就是事件循环机制,开始到Event Queue的开头取出第一个事件,从线程池中分配一个线程去执行这个事件,接下来继续取出第二个事件,再从线程池中分配一个线程去执行,然后第三个,第四个。主线程不断的检查事件队列中是否有未执行的事件,直到事件队列中所有事件都执行完了,此后每当有新的事件加入到事件队列中,都会通知主线程按顺序取出交EventLoop处理。当有事件执行完毕后,会通知主线程,主线程执行回调,线程归还给线程池。
  • 4、主线程不断重复上面的第三步。

总结:

我们所看到的node.js单线程只是一个js主线程,本质上的异步操作还是由线程池完成的,node将所有的阻塞操作都交给了内部的线程池去实现,本身只负责不断的往返调度,并没有进行真正的I/O操作,从而实现异步非阻塞I/O,这便是node单线程和事件驱动的精髓之处了。

相关文章

  • NodeJS单线程为什么可以实现并发

    事件驱动/事件循环 nodejs所谓的单线程,只是主线程是单线程,通过事件循环(event loop)来实现并发操...

  • 关于aiohttp

    aiohttp强调的是异步并发。提供了对asyncio/await的支持,可以实现单线程并发IO操作。 原理就是不...

  • Nodejs child_process学习

    Nodejs子进程、多进程 我们都知道 Nodejs 是以单线程的模式运行的,但它使用的是事件驱动来处理并发,这样...

  • 扛着锄头写代码之nodejs初识

    引子 为了web app而看的nodejs,对于nodejs的单线程对高并发友好小小烟纠了下,分享,欢迎指正谬误。...

  • Nodejs child_process

    nodejs以单线程模式运行,但使用事件驱动处理并发,有助于创建多个子进程提高性能。默认nodejs父子进程会建立...

  • 解决nodejs异步问题

    nodejs 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高nodejs的每一个api都是异步...

  • nodejs 的 Event Loop 和 EventEmitt

    nodejs 的 Event Loop nodejs 的单线程 nodejs 的单线程不是绝对的,在用户界面视图上...

  • 利用aiohttp制作异步爬虫

      asyncio可以实现单线程并发IO操作,是Python中常用的异步处理模块。关于asyncio模块的介绍,笔...

  • 利用aiohttp制作异步爬虫

    简介 asyncio可以实现单线程并发IO操作,是Python中常用的异步处理模块。关于asyncio模块的介绍,...

  • Python实现协程实例

    1. 目标:在线程下实现并发并发(多个任务看起来是同时执行就是并发):切换+保存状态 2. 协程:协程是单线程实现...

网友评论

      本文标题:NodeJS单线程为什么可以实现并发

      本文链接:https://www.haomeiwen.com/subject/gcwqwktx.html