【发布时间】:2011-06-04 01:14:00
【问题描述】:
我有两个菜鸟问题:
1) 为什么 node.js 在单线程中运行?为什么不直接使用流程本身呢? 或者在线程而不是进程中运行它有什么好处?
2) 如果进程中的线程崩溃会发生什么(我知道,未处理的异常会导致进程退出),但是如果它被正确捕获会发生什么?或有浮点异常等异常。 进程也会崩溃吗?
【问题讨论】:
我有两个菜鸟问题:
1) 为什么 node.js 在单线程中运行?为什么不直接使用流程本身呢? 或者在线程而不是进程中运行它有什么好处?
2) 如果进程中的线程崩溃会发生什么(我知道,未处理的异常会导致进程退出),但是如果它被正确捕获会发生什么?或有浮点异常等异常。 进程也会崩溃吗?
【问题讨论】:
【讨论】:
我认为您对在这种情况下“单线程”的含义有些困惑。 Node.js 本身在后台利用多个线程以异步方式处理阻塞调用。
Node.js 核心,即 JavaScript 引擎,是单线程的。多线程的缺乏和事件循环的可用性使编程变得更加容易。简而言之,您不必处理多线程带来的所有并发问题,您的代码以这种方式更具确定性。
如果一个线程崩溃了,这与它是唯一的一个还是多个线程中的一个完全无关,如果代码崩溃了,你最好的希望就是程序随之死亡,没有什么比让你的程序继续运行更麻烦的了以部分损坏的状态运行。想象一下崩溃的线程负责将数据保存到磁盘,现在您的程序继续运行而不再保存。
【讨论】:
在进程或单线程中运行程序是一回事。每个进程都有一个主线程。根据编程语言和平台,可以使用额外的线程来同时运行部分程序。 Node.js 无法启动额外的线程。
这样,除了启动新进程之外,您没有可能并行运行程序的各个部分。单个进程中的多个线程共享相同的内存,而进程不共享。当你需要在进程之间共享信息时,你必须使用消息传递。
消息传递的缺点是它比通过内存共享信息要慢。这样做的好处是您不必考虑内存中对象的可变状态以及如何确保这些对象不会变得不一致。
【讨论】: