我在Node.JS中创建一个程序,通过为每个文件创建child_process.spawn,使用命令行实用程序pdftotext提取pdf文本。我想知道这个过程是否CPU重,如果有可能成千上万的人使用而不会破坏任何东西。
创建一个child_process很重吗?如果pdftotext不是多线程的,我该如何扩展?我需要负载平衡吗?
感谢。
答案 0 :(得分:0)
让我们稍微分解一下:
我想知道此过程是否为CPU重量
我不确定单个文件的CPU强度 pdftotext 是多少。这也取决于每个文件的大小,但一般来说,由于将PDF提取到文本的操作没有异步工作并且受CPU限制,我认为这个过程是CPU很重,特别是有很多负载。
如果有可能成千上万的人使用而不打破任何东西。
为每个文件或每个请求生成一个新进程通常不是一个好主意。产生一个过程是一项昂贵的操作,需要大量的内存。有成千上万的人同时使用你的服务需要在你的服务器上同时打开数千个进程,这会导致内存窒息而你的服务器最大限度地达到一定的限制并在此之后失败。
创建一个child_process很重吗?如果pdftotext不是多线程的,我该如何扩展?我需要负载平衡吗?
如上所述,产生一个新过程绝不是一个廉价的操作。它需要内存和资源。
每个文件都将在一个单独的进程中运行。天气pdftotext被实现为在一个进程中打开一个或多个线程在这里是无关紧要的,无论哪种方式,其所有线程的进程将与其他进程竞争机器资源。当然,如果它以一种在不同线程之间划分工作并且可以并行执行的方式实现它是有益的,因为这使得它更快,但是你更关心的是从单个文件中提取文本需要多长时间,即该过程花了多长时间。
如果要将其作为服务运行,则需要根据要支持的负载和基准测试结果进行基准测试,优化和确定,必须在几台高端机器之间进行负载平衡。
我希望我能回答你的一些问题。