- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在阅读了事件循环以及异步在 node.js 中的工作原理之后,这是我对 node.js 的理解:
但这是我的问题:仅当处理 Node 发送的请求的实体(服务器/进程/线程?)不是 Node 服务器本身时,非阻塞 I/O 似乎比阻塞 I/O 更快。
如果处理请求的服务器与发出请求的服务器相同,会出现什么情况?如果我的第一个项目符号是正确的,那么在这种情况下,如果阻塞 I/O 使用不同的线程来完成任务,它会比非阻塞 I/O 工作得更快吗?文件压缩是否可以作为在多线程阻塞 I/O 上运行速度更快的 I/O 任务的示例?
最佳答案
非阻塞操作的主要好处是相对重量级的 CPU 线程不会在服务器等待其他地方发生某些事情(网络、磁盘 I/O 等)时保持忙碌。这意味着许多不同的请求可以在只有一个 CPU 线程的情况下“进行中”,并且没有线程卡在等待 I/O。编写异步友好代码和使用异步 I/O 操作的负担又落在了开发人员身上,但在繁重的 I/O 绑定(bind)操作中,服务器可伸缩性确实有好处。单线程模型也确实简化了对共享资源的访问,因为线程冲突、死锁等的机会要少得多……这可以减少难以发现的线程同步错误,这些错误往往只会在最糟糕的时间(例如忙碌的时候)。
是的,只有当处理 I/O 操作的代理不是 node.js 本身时,非阻塞 I/O 才真正有用,因为 Node 中非阻塞 I/O 的全部意义在于 Node 可以自由使用它的单个线程在 I/O 操作运行时去做其他事情,如果它是服务于 I/O 操作的 Node ,那将是不正确的。
抱歉,我不明白你问题中关于文件压缩的部分。文件压缩需要一定数量的 CPU,无论谁处理它,如果您试图决定是在 Node 本身内部还是在外部进程(运行不同的线程)中处理它,则有很多不同的考虑因素。这不是一个简单的问题。我可能会从使用我已有的用于压缩的任何代码开始(例如,如果你有,则使用 Node 代码,如果你有,则使用外部库/进程),并且只有在你实际遇到性能问题时才研究不同的选项或可扩展性问题,或者知道您有问题。
仅供引用,一种处理压缩的简单机制是将未压缩的数据假脱机到 node.js 应用程序的临时目录中的文件,然后有另一个进程(可以在任何系统中编写,甚至包括 Node )只在应用压缩的临时目录中查找文件,然后对生成的压缩数据执行更永久的操作。
关于javascript - node.js I/O 非阻塞 - 了解何时最有益,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26391766/
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我正在查看另一个开发人员提交给项目的差异,他们有很多代码可以执行 !! .事实上,这似乎是他们实现 boolean getter 和 setter 的标准模式。他们已经实现了他们的代码: - (BOO
假设我有一个显示博客文章的网站。在这个网页上有一个评论部分,但它在页面加载时隐藏了。但是,评论计数会在其位置显示给用户,如果用户单击该计数,则会进行 ajax 调用以加载所有评论。 通常我会做一些额外
一般推荐使用ConfigureAwait(false)在不需要上下文的情况下等待异步调用时。只是想知道使用 ConfigureAwait(false) 有什么好处吗?在 Azure 函数中。 Azur
我是一名优秀的程序员,十分优秀!