NodeJS中的多线程和异步有什么区别

时间:2018-06-22 10:44:08

标签: node.js multithreading asynchronous

NodeJ在最新更新中添加了多线程功能。

我想通过简单的示例了解多线程和异步之间的区别是什么?在哪种情况下,我们应该使用多线程而不是异步?

1 个答案:

答案 0 :(得分:4)

首先要了解的是,计算机的不同部分以不同的速度工作。 磁盘,网络等...

因此,如果您发现异步代码似乎仅处理网络或文件中的大量内容,那么我们称其为io。

好,很酷。

现在让我们考虑一下,您的代码正在运行,您需要读取一个文件。在cpu时间。因此,这是“数千年”,CPU表示。嘿,当数据可用时,您让我知道。依玛去做其他事情。

然后磁盘又回来了,就像嘿,我得到了您想要的数据。 CPU喜欢吗?数据哦,那是我正在“等待”的事情。

您会看到如何提高效率。

现在,如果您没有获取数据该怎么办。如果您的CPU需要做的不只一件事情该怎么办。

遵循此步骤,早上您可以在倒果汁的同时做一个三明治。很难同时做对吗?

但是您可以在等待煮鸡蛋的同时轻松倒入果汁。

线程... 线程将获得更多帮助。我需要执行更多任务,例如缩小图像大小,等不及要缩小图像。我需要主动缩小图像,但是我需要回应其他人,我需要缩小多幅图像,我一次不能做一个。

所以现在您有了一个概念,让我实际解释该死的事情。

异步代码创建一个哑线程,该线程仅等待io(例如磁盘或网络)。它仍然是一个线程,但是代码为您很好地处理了它。它为您解决了许多复杂的工作。您只需编写await和async。

通常情况下,您必须管理更多的线程。 这样想吧。

从磁盘读取,从网络读取..它们是很明显的事情,您可以确保围绕它创建一个API。 但是,cpu的工作可以使cpu无限地做。线程通常涉及更多的手动工作。

最后一个线程只能做一件事。用一只手倒入橙汁,然后在三明治上涂黄油。 很难吧?可能需要螺纹,多余的手。

现在煮鸡蛋并用一只手切一些西瓜。 您会看到如何等待一些事情完成并去做其他事情。

去..你现在是个男人!!