我需要从在线 url 读取一个文件并在多线程中处理它并将其写入另一个输出中。 https://www.w3.org/TR/PNG/iso_8859-1.txt 我尝试过的解决方案: 如果集群是主集群 我根据 cpu 计数分叉了新线程,并在外部循环读取文件。 我必须确保每个线程都有一定的行要在输出文件中打印,因为同一行不应重复。
我不确定这是否是正确的方法。 请分享您的答案或建议。
你能详细说明为什么你认为你应该在不同的线程中处理一些东西吗?
请在此处查看我关于类似问题的详细回复:如何在节点中真正使耗时的请求异步
总结一下:
- Node.JS 仅在一个线程(主线程)中执行您的 JavaScript 代码
- 内置模块如
fs
、http
、net
等利用libuv
工作线程在后台线程中处理I/O - 第三方模块可能会做同样的事情,这取决于它们的实现
- 如果您希望在后台线程中执行代码,您有 2 个选项:
- 编写一个 C 包装器模块,它使用
libuv
个工作线程来完成这些工作 - 在 Node.JS 10(文档)中引入的 javascript 代码中使用
WorkerThreads
,但请注意,此模块的状态是实验性的,尚未准备好投入生产
- 编写一个 C 包装器模块,它使用
一般来说,我非常怀疑你想自己使用线程。您的问题表明您要从网络服务器下载文件。可用的模块(fs
、request
、http
、...)已经使用后台线程来执行I/O,因此我不清楚您还需要后台处理。
请澄清更多,或者考虑坚持使用可用的模块,以防您不需要"更多多线程"。