Javascript-使用ImageMagick的Node.js,为什么未阻止服务器?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Javascript-使用ImageMagick的Node.js,为什么未阻止服务器?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1468字,纯文字阅读大概需要3分钟。
内容图文
![Javascript-使用ImageMagick的Node.js,为什么未阻止服务器?](/upload/InfoBanner/zyjiaocheng/664/9560c3c9ac7e4aa78b2390ef15620b3a.jpg)
据说Node.js代码是单线程,不应该处理某些cpu密集型任务,例如图像大小调整,这些任务应该委托给其他程序(例如ImageMagick第三方服务).reference:
我在项目中使用了S3-uploader lib,并使用两台设备对其进行了测试,以便同时上传和调整图像大小,但我发现服务器确实没有受到其中一个请求的阻止,尽管cpu的使用率几乎为100%,并且响应需要大约需要3000毫秒才能完成(这只是一个AWS EC2 t2.micro实例).
理解和问题如下图所示:
请帮助我确保对上述node.js单线程的理解以及存在的问题:
>当线程1将任务委托给ImageMagick时,新来的请求是否可以免费使用此线程?
编辑
>图像不是100%正确的. ImageMagick的委托和回调也应该通过事件循环进行,并且节点应用程序只有一个事件循环(据我所知,任何人都可以确认吗?).
>回答来自node-s3-uploader作者:https://github.com/Turistforeningen/node-s3-uploader/issues/64
解决方法:
尽管ImageMagick似乎是同步的,但事实并非如此. ImageMagick(和使用im-resize的s3-uploader)产生一个子进程(使用child_process.exec)以执行处理,因此不会阻塞该进程.
至于服务器上实际发生的情况,根据您的描述,我认为您正在微型实例上运行ImageMagick.结果是,尽管您的进程是免费的,这意味着事件循环没有被阻塞,并且事件正在处理(问题1),并且可以处理其他请求(问题2),ImageMagick却在处理图像,并且使用尽可能多的CPU.反过来,这确实占用了CPU,这会降低您的应用速度.
这是一种具有讽刺意味的冲突:您正在启动一个单独的进程以释放线程,但是该进程实际上窃取了所有可用的CPU.
在这种情况下,最佳实践不是在服务器上本地执行繁重的处理,而是为任务委派单独的CPU,无论它是运行处理服务的实例,lambda函数还是适用于您的任何其他解决方案.
进一步阅读:
内容总结
以上是互联网集市为您收集整理的Javascript-使用ImageMagick的Node.js,为什么未阻止服务器?全部内容,希望文章能够帮你解决Javascript-使用ImageMagick的Node.js,为什么未阻止服务器?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。