如果一个线程在进程中崩溃会发生什么?

时间:2011-01-05 14:16:10

标签: multithreading node.js

我有两个noob问题:

1)为什么node.js在一个线程中运行?为什么不只是使用过程本身?    或者在线程而不是进程中运行它有什么好处?

2)如果进程中的线程崩溃会发生什么(我知道,未处理的异常会导致进程退出),但是如果它正确捕获会发生什么?或者像浮点异常这样的例外。 这个过程也会崩溃吗?

3 个答案:

答案 0 :(得分:3)

我认为你对“单线程”在这种情况下意味着什么感到困惑。 Node.js本身在后台利用多个线程以异步方式处理阻塞调用。

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

如果线程崩溃,那么这是唯一的一个还是其中之一完全不相关,如果代码崩溃了你可以希望的最好的东西就是程序就死了,没有什么比你继续编程更麻烦了以部分损坏的状态运行。想象一下崩溃的线程负责将数据保存到磁盘,现在你的程序继续运行而不再保存。

答案 1 :(得分:0)

  1. node.js设计得非常轻量级,只在需要时调用。因此每个线程处理一个请求然后退出。如果你调用/ mypage,node.js将处理请求然后终止。这样可以在保持较小占地面积的同时获得更好的性能
  2. 如果存在异常并且处理得当,则会根据您的定义方式抛出错误。 Javascript是全有或全无的语言。任何错误都会导致javascript抛出错误并崩溃,这就是为什么你需要确保处理所有可能的错误。

答案 2 :(得分:0)

在进程或单线程中运行程序是一回事。每个进程都有一个主线程。根据编程语言和平台,可以使用其他线程同时运行程序的某些部分。 Node.js无法启动其他线程。

这样,除了启动新进程之外,您无法并行运行程序的各个部分。单个进程中的多个线程共享相同的内存,而进程则不共享。当您需要在进程之间共享信息时,您必须使用消息传递。

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