我正在使用sharp库在一个单独的worker线程中缩小图像的大小。代码片段如下所示:
async function create_preview(path) {
return lib.sharp(path)
.resize({ width: 1024, height: 1024, fit: lib.sharp.fit.inside })
.webp({ quality: 25, alphaQuality: 25 })
.toBuffer()
.then(result => "data:image/webp;base64," + result.toString("base64"));
}
同时,在我的主要后端线程中,我试图使用sqlite3从sqlite数据库提供一些数据。问题是,在大图像(81MP)上运行预览生成有时会导致数据库在处理时变得没有响应。像这样异步排队多个图像将导致一定的冻结,直到处理完成。
我非常不知道如何解决这个问题,节点中的线程一开始就很不稳定,似乎没有理由会发生这种情况,即使主后台线程和处理图像的工作线程之间没有通信,也会发生这种事情。我在想,也许node有一个有限的线程池,而使用sharp的工作线程占用了所有线程池,所以sqlite3就没有了?有人有理论吗?