我有两个菜鸟问题:

1)为什么node.js在一个线程中运行?为什么不只是使用该过程本身?还是在线程而不是过程中运行它的优点是什么?

2)如果过程中的线程崩溃会发生什么(我知道,未处理的例外将导致进程退出),但是如果正确捕获该过程会发生什么?或诸如浮点异常之类的例外。该过程还会崩溃吗?

有帮助吗?

解决方案

我认为在这种情况下,您对“单线线”的含义有些困惑。 node.js本身在后台使用多个线程以异步方式处理其他阻止调用。

Node.js Core,JavaScript引擎,是单线螺纹。缺乏多线程和事件循环的可用性使编程变得更加容易。简而言之,您不必处理多线程带来的所有并发问题,您的代码是这样更确定性的。

如果线程崩溃,这是完全无关紧要的,无论这是唯一还是众多,如果代码崩溃了,那么您希望的最好的事情是,该程序死了,没有什么比让您继续进行编程继续运行的更麻烦了部分腐败的状态。想象一下,崩溃的线程负责将数据保存到磁盘,现在您的程序继续运行而无需再保存。

其他提示

  1. Node.js设计为极轻的轻巧,仅在需要时调用。因此,每个线程处理一个请求然后退出。如果您致电 /mypage,则Node.js将处理请求,然后终止。这会带来更好的性能,同时保持小占地面积
  2. 如果有例外,并且可以正确处理,则它将根据您定义的方式丢弃错误。 JavaScript是全部或全文。任何错误都会导致JavaScript引发错误并崩溃,这就是为什么您需要确保处理所有可能的错误。

在过程或单线螺纹中运行程序是同一件事。每个过程都有一个主线程。根据编程语言和平台,可以使用其他线程同时运行程序的一部分。 Node.js没有可能启动其他线程。

这样,除了启动新过程外,您也不可能并行运行程序。单个进程中的多个线程共享相同的内存,而过程却没有。当您需要在过程之间共享信息时,必须使用消息传递。

消息传递的缺点是,它比通过内存共享信息要慢。优势在于,您不必推理记忆中对象的可变状态以及如何确保这些对象不会变得不一致。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top