如果所有node.js的工作线程都忙,该怎么办

丹尼尔

我尝试了解node.js的工作原理,尽管我已阅读本文:何时使用线程池?我不确定所有工作线程都忙并且准备好执行另一个异步I / O操作时会发生什么。

如果我正确理解了这篇http://www.future-processing.pl/blog/on-problems-with-threads-in-node-js/文章,则事件循环将被阻塞,直到工作线程可以自由处理附加的I / O操作。这意味着如果五个用户尝试同时访问一个网页(例如,他们的个人资料页面要求进行db查询),则第5个用户将被阻止,直到完成第一个db查询并且该工作线程再次空闲为止?

mscdex

I / O通常不会阻塞事件循环(当前存在一些异常,例如crypto模块和fs.*Sync()方法之类的东西),尤其是在网络I / O的情况下,根本不使用libuv线程池(仅适用于诸如dns(当前)和fs操作)。

如果您的数据库驱动程序是用C ++编写的node.js插件,则可能会阻塞事件循环(正在做同步操作)或正在使用libuv线程池。但是,如果数据库驱动程序仅用JavaScript编写,则它通常会使用某种网络I / O,如前所述,它不会阻止任何内容,也不会使用libuv线程池。

因此,在您的示例中,根据数据库驱动程序的实现方式,可以一次为所有5个用户提供服务。例如,协议级别的MySQL每个连接一次仅支持一个未完成的查询。因此,大多数用于node.js的MySQL驱动程序将做的工作是将其他查询排队,直到当前查询完成为止。但是,MySQL驱动程序完全有可能在内部维护某种连接池,以便具有更大的并发性。

但是,如果5个请求中的每一个都导致磁盘有问题,那么由于libuv线程池的当前默认大小,第5个请求可能不得不等待其他4个fs请求之一完成。这并不意味着事件循环本身会被阻塞,因为它仍然可以处理新的传入请求和其他内容,但是第5个客户端将只需要等待更长的时间。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果工作线程发布消息时主线程忙,该怎么办?

来自分类Dev

如果线程在其他线程等待(退出)之前退出,该怎么办?

来自分类Dev

如果所有记录的订单字段的值都相同怎么办

来自分类Dev

如果AsyncTask被取消,该怎么办?

来自分类Dev

如果AsyncTask被取消,该怎么办?

来自分类Dev

如果线程在调用pthread_join之前退出,该怎么办

来自分类Dev

如果我有几个重叠的QTimer,该怎么办

来自分类Dev

如果没有上下文该怎么办?

来自分类Dev

如果没有上下文该怎么办?

来自分类Dev

为什么EC2实例将所有时间都花在“ IRQ”上,该怎么办?

来自分类Dev

如果工作完成了怎么办

来自分类Dev

PHP Ajax表单,如果禁用了JS,该怎么办

来自分类Dev

从我的项目中删除所有componentWillMount,如果我的子组件依赖于api响应,该怎么办?

来自分类Dev

如果我的所有 PHP 页面在使用 Apache2 时都是空白的,我该怎么办?

来自分类Dev

BDD结果:如果遇到错误该怎么办

来自分类Dev

如果不等待任务该怎么办?

来自分类Dev

如果isAvailableForServiceType方法返回NO,该怎么办

来自分类常见问题

如果我的发行证书过期,该怎么办?

来自分类Dev

如果MIDL无法创建tlb,您该怎么办?

来自分类Dev

如果“包装要求”过长,该怎么办?

来自分类Dev

如果构造不需要括号,该怎么办?

来自分类Dev

如果遇到electron-dl,我该怎么办?

来自分类Dev

如果bash停止回声,该怎么办?

来自分类Dev

如果找不到302 URI,该怎么办?

来自分类Dev

如果div文字等于某些文字,该怎么办?

来自分类Dev

如果存在多个提交案例,我该怎么办

来自分类Dev

如果忘记启用EFI分区该怎么办?

来自分类Dev

如果建立连接失败,该怎么办?

来自分类Dev

如果要使用zabbix监视VoltDB,该怎么办?

Related 相关文章

  1. 1

    如果工作线程发布消息时主线程忙,该怎么办?

  2. 2

    如果线程在其他线程等待(退出)之前退出,该怎么办?

  3. 3

    如果所有记录的订单字段的值都相同怎么办

  4. 4

    如果AsyncTask被取消,该怎么办?

  5. 5

    如果AsyncTask被取消,该怎么办?

  6. 6

    如果线程在调用pthread_join之前退出,该怎么办

  7. 7

    如果我有几个重叠的QTimer,该怎么办

  8. 8

    如果没有上下文该怎么办?

  9. 9

    如果没有上下文该怎么办?

  10. 10

    为什么EC2实例将所有时间都花在“ IRQ”上,该怎么办?

  11. 11

    如果工作完成了怎么办

  12. 12

    PHP Ajax表单,如果禁用了JS,该怎么办

  13. 13

    从我的项目中删除所有componentWillMount,如果我的子组件依赖于api响应,该怎么办?

  14. 14

    如果我的所有 PHP 页面在使用 Apache2 时都是空白的,我该怎么办?

  15. 15

    BDD结果:如果遇到错误该怎么办

  16. 16

    如果不等待任务该怎么办?

  17. 17

    如果isAvailableForServiceType方法返回NO,该怎么办

  18. 18

    如果我的发行证书过期,该怎么办?

  19. 19

    如果MIDL无法创建tlb,您该怎么办?

  20. 20

    如果“包装要求”过长,该怎么办?

  21. 21

    如果构造不需要括号,该怎么办?

  22. 22

    如果遇到electron-dl,我该怎么办?

  23. 23

    如果bash停止回声,该怎么办?

  24. 24

    如果找不到302 URI,该怎么办?

  25. 25

    如果div文字等于某些文字,该怎么办?

  26. 26

    如果存在多个提交案例,我该怎么办

  27. 27

    如果忘记启用EFI分区该怎么办?

  28. 28

    如果建立连接失败,该怎么办?

  29. 29

    如果要使用zabbix监视VoltDB,该怎么办?

热门标签

归档