有没有办法在操纵a的应用程序中实现真正的多线程?

时间:2019-09-09 14:54:02

标签: puppeteer

这可能是一个非常愚蠢的问题。我承认我对chrome网站引擎和JS v8引擎的功能有些天真。

但是说,我正在运行一个伪造的应用程序,该应用程序正在从标记中抓取URL,并将其推入名为img2arr的数组中

然后,我有一个本地文件var img1 = ./image.jpg(用引号引起来)。

最后,我有一个函数compare(img1, img2arr),将这两个参数都用作参数,并使用了诸如blink-diff或Jimp之类的库,将img1与{{ 1}}。这一切都发生在img2arr.forEach()循环中,但是可以随着.map的增长而变慢。

说它包含500个图像URL-是否可以使用服务工作者,特定的Node.js库或其他方法来确保我的图像循环和比较逻辑都在多个线程中发生?

例如200个循环,比较两个12KB图像需要7秒钟,但是以我超快的12核处理器,它会不会少于1个?

对不起,我很天真!

1 个答案:

答案 0 :(得分:1)

有几种可能的方法:
1.使用spawn在计算机的每个内核上分别运行脚本。这实际上是nice article
2.使用node.js worker threads here,您可以在示例中找到它的工作方式。

与您决定的实现方式无关,主要是收集到目前为止的所有数据

  

最后,我有一个功能compare(img1,img2arr),需要使用....

然后,将img2arr数组拆分为多个块。您可以从this article中选择任何一种方法
分离后,将每个块传递到单独的进程,然后等待第一个进程找到相似的图像。
当进程发现相似的映像时,您可以从主进程中杀死所有其他进程。

因此,整个过程将是:
1.收集图像进行比较
2.分割图像以进行比较。
3.分离比较逻辑以分离文件,并在该文件上运行线程/进程。
3a。将块发送到可用进程
3b。等待进程成功返回并杀死所有其他进程。