Node.js 不是文件上传(以及所有基于事件循环的语言)的好选择 - 这是真的
Node.js is not a good option for file uploads (and all event-loop based languages) - is that true?
据说使用 Node.js 不建议上传文件,因为它会阻塞 IO 循环直到完成,所以我尝试流式上传许多并发文件,我发现 Sails.js(围绕 express 和 node 的包装器)从第一个、第二个、第三个上传块......到 N 个上传器,然后再次回到第一个上传者以循环方式获取下一个块,结果是:所有文件上传几乎同时完成,其方式类似于上传一个大文件,其大小等于并发上传文件的总大小。
我最终得出的结论是,高命中率的文件上传系统不应由采用 IO 事件循环技术的语言设计,而是每个连接的上传客户端应在服务器上有自己的线程,以实现不同上传之间的适当分离以及服务器内存大小和客户端数量之间的衬垫关系。
我在这里得出了正确的结论,还是误解了什么?
你的结论是
每个连接的上传客户端在服务器上都有自己的线程,以实现不同上传之间的适当分离
这是不正确的,因为进程中的每个线程都会消耗资源进行内存管理、线程切换等。因此,在具有无限线程的线程环境中构建命中率文件上传将无法扩展。在 node 中使用基于流的上传解决方案时.js与其他语言/平台相比,应用程序的内存占用和性能应该非常有竞争力。
你的结论与事实相去甚远。基于事件循环的并发对于文件上传等 I/O 任务(也同时发生)非常有效。事件循环仅在代码运行时被阻止 - 事件回调,如连接就绪,更多数据可用等。在你的代码中,你只是做一些非常快速的事情,比如说你想用数据做什么,它应该去哪里等。填充缓冲区和 I/O 传输由操作系统内核处理。在现代计算机上,您可以执行类似 60000 (+/- 50000) 并发传输的操作,同时保持代码正常运行。
- jQuery:循环一个具有不同超时值的循环
- 在循环中分配json值时,值被覆盖
- 如何在下面的ES6循环中获得前面的文本
- 为什么“;未定义的“;在JavaScript中结束循环
- Javascript循环不会自我更新
- 如何使用jquery处理php循环通过元素
- 而循环只设置php中输入字段中的第一个值
- 循环遍历数组中的特定索引
- Javascript返回值只在循环中返回一次
- 按照选项卡索引的顺序循环一个jQuery选择
- 循环遍历以数组为值的Javascript对象
- 为什么JavaScript在for循环为3时向所有4发出警报
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- 循环结束/推送到数组之前在页面上呈现EJS
- 如何使此循环工作?它's返回未定义的语言js
- 如何在检测浏览器语言的同时停止JavaScript的无限循环
- Node.js 不是文件上传(以及所有基于事件循环的语言)的好选择 - 这是真的
- 如何使用EJS模板语言打破循环
- 如何在foreach循环之前使用我的语言变量