首页 > 解决方案 > 在 Node.js 中的多线程中处理文件

问题描述

我需要从在线 url 读取文件并在多线程中处理它并将其写入另一个输出。 https://www.w3.org/TR/PNG/iso_8859-1.txt 我试过的解决方案:如果集群是master,我会根据cpu计数分叉新线程。在for循环之外读取文件。我必须确保每个线程都有特定的行以在输出文件中打印,因为不应重复同一行。

我不确定这是否是正确的方法。请分享您的答案或建议。

标签: node.js

解决方案


您能否详细说明为什么您认为应该在不同的线程中处理某些内容?

请在此处查看我关于类似问题的详细回复:如何在节点中真正实现耗时的异步请求

总结一下:

  • Node.JS 仅在一个线程(主线程)中执行您的 javascript 代码
  • fs,http等内置模块net利用libuv工作线程在后台线程中处理 I/O
  • 第三方模块可能会做同样的事情,这取决于它们的实现
  • 如果您希望您的代码在后台线程中执行,您有 2 个选项:
    • 编写一个 C-wrapper 模块,它使用libuv工作线程来做这些事情
    • WorkerThreads在 Node.JS 10 ( Docs ) 中引入的 JavaScript 代码中使用,但请注意此模块的状态是实验性的,尚未准备好投入生产

一般来说,我非常怀疑自己使用线程。您的问题表明您想从网络服务器下载文件。可用的模块(fs, request, http, ...)已经使用后台线程来执行 I/O,所以我不清楚除此之外您还需要在哪里进行后台处理。

请澄清更多,或者考虑坚持使用可用的模块,以防您不需要“更多的多线程”。


推荐阅读