【问题标题】:How the server make sure clients requests doesn't interfere with each other?服务器如何确保客户端请求不会相互干扰?
【发布时间】:2021-08-28 07:35:21
【问题描述】:

我有一个面试问题,服务器是如何做到不让客户端的请求相互拦截的?

我实际上无法回答,因为我没有在网上找到答案。

我想到了parrel请求/异步调用/并发或线程的原因。

但我对此没有真正的答案。

【问题讨论】:

    标签: node.js multithreading asynchronous async-await concurrency


    【解决方案1】:

    不确定我是否理解您的问题,但这篇文章很好地解释了 nodeJS 的单线程模型(node-js-architecture-single-threaded-event-loop

    tldr

    NodeJS 有一个用于事件循环的线程。我不确定具体的数据结构实现,但每个请求都被添加到队列中,由事件循环拾取、执行并发送响应。

    如果请求执行阻塞 IO(或其他阻塞进程*),则操作将移交给不同的线程,请求被放入某个等待列表中,并且事件循环会选择不同的请求来处理。一旦阻塞操作完成,事件循环会获取原始请求并加上操作的结果,继续处理请求然后发送响应。

    * 如果阻塞进程是由您在程序上编码的,您最终可能会阻塞导致 DOS 的事件循环。应该为此使用工作线程。

    ** NodeJS 也有使用集群模块的多线程概念,所以有,但它仍然通常被认为是单线程的。

    【讨论】:

      猜你喜欢
      • 2014-10-06
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      相关资源
      最近更新 更多