【问题标题】:Node JS Asynchronous requestHandler (for routing)Node JS 异步 requestHandler(用于路由)
【发布时间】:2012-07-06 10:05:02
【问题描述】:

我正在通过The Node Beginners book 并且对节点js请求处理的“同步方式”有疑问。那么我的意思是假设我的网站有 2 个页面启动和上传(根据教程),我对 2 个页面发出并发请求,然后请求被串行处理(比如第一次启动将被获取,然后上传将被获取)。如果我的网站每秒接收 100 个请求(并且我只运行一个节点进程),所有这些请求都将被串行处理。所以对路由器没有意义吗
调用 setTimeOut 中的所有 requestHandlers(类似于 setTimeOut(handler(response), 0) )?这样路由器的任务将仅限于调用处理程序并移动到下一个请求等待。当然,页面需要时间来加载,具体取决于其大小和操作,但至少时间用于完成重要工作,而不是仅仅等待其他页面。

我也知道节点运行一个进程。但它确实运行多个线程不是吗?

【问题讨论】:

    标签: node.js asynchronous


    【解决方案1】:

    要回答您的最后一个问题,您用 JavaScript 为 Node 程序编写的所有代码都在单个线程中运行;异步 I/O 任务被 libuv 抽象出来。

    我认为您没有以足够细化的方式考虑您的两个请求;你说,

    将获取第一次启动,然后将获取上传

    但是,实际上,Web 请求和响应由各种 IO 任务组成,而不仅仅是您在 JavaScript 程序中执行的处理。例如,当数据通过套接字为“start”处理程序流式传输时,数据也可以为“upload”处理程序流式传输到程序中。

    【讨论】:

    • 我浏览了一些材料,发现了单线程模型,我知道异步 I/O 任务可以以单线程但异步的方式完成。但是 JS 处理呢?在大量页面上串行进行JS处理,这不是性能杀手吗?
    • 这取决于你在做什么。如果您要设置一些变量并开始渲染,则不会。如果您正在进行长时间运行的计算,是的。您可以将它们分叉到一个新进程中,也可以编写一个 C++ 扩展来利用异步线程池。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 2016-07-25
    • 2019-07-13
    • 1970-01-01
    相关资源
    最近更新 更多