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

我有两个noob问题:

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

2)如果一个进程中的线程崩溃(我知道,未处理的exception将导致进程退出)会发生什么情况,但是如果正确catch'd会发生什么? 或者浮点exception等exception。 这个过程是否也会崩溃?

在这种情况下,我觉得你对于“单线程”的含义有些困惑。 Node.js本身利用后台的多个线程以asynchronous方式处理阻塞的调用。

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

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

  1. node.js被devise为非常轻量级,只有在需要的时候才被调用。 所以每个线程处理一个请求然后退出。 如果你调用/ mypage,node.js将处理请求,然后终止。 这样可以在保持较小占用空间的同时提高性能
  2. 如果出现exception,并且处理得当,那么它会根据你的定义抛出一个错误。 JavaScript是全部或没有语言。 任何错误都会导致JavaScript抛出一个错误和崩溃,这就是为什么你需要确保你处理所有可能的错误。

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

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

消息传递的缺点是它比通过内存共享信息要慢。 这样做的好处是,您不必为存储器中的对象导致可变状态,也不必确保这些对象不会变得不一致。