如何防止 Nan/V8 线程使节点主机进程崩溃?
How to prevent a Nan/V8 thread crashing a node host process?
我正在使用 Nan/V8 构建一个本地节点模块,它使用 AsyncWorker 创建一个异步函数。
有没有办法在我的线程崩溃时保护节点主机应用程序不死机?每个 worker 执行的数据都是本地的,所以最坏的情况是内存泄漏,但我需要保护主机应用程序不崩溃。
崩溃通常是每个进程的事件。没有办法让单个线程崩溃并让同一进程中的其他线程继续运行。
FWIW,这与 Node/Nan/V8 无关。这是所有现代浏览器使用多进程架构的关键原因之一。
当然,从多线程应用程序切换到多进程模型是有代价的:与其他进程交换数据(IPC,“进程间通信”)通常比协调几个进程更麻烦单个进程中的线程。
也就是说,人们有时会用不同的含义来使用“崩溃”一词,因此这里可能还有其他答案。例如。从 JavaScript 的角度来看,未处理的异常可以描述为“崩溃”——这很容易处理和恢复,甚至线程也不必为此而死。
此外,应用程序实际上必须处理崩溃进程的情况非常罕见(浏览器就是一个例子);大多数时候,开发人员的时间最好花在确保不会发生崩溃上,而不是在它们确实发生时尝试处理它们。 Node 本身应该足够稳定,不会崩溃;对于你自己的模块,设计(和调试,如果需要的话:-))它不会崩溃可能比设计(和测试)一个让它优雅地处理崩溃的方案更 feasible/effective。
我正在使用 Nan/V8 构建一个本地节点模块,它使用 AsyncWorker 创建一个异步函数。
有没有办法在我的线程崩溃时保护节点主机应用程序不死机?每个 worker 执行的数据都是本地的,所以最坏的情况是内存泄漏,但我需要保护主机应用程序不崩溃。
崩溃通常是每个进程的事件。没有办法让单个线程崩溃并让同一进程中的其他线程继续运行。
FWIW,这与 Node/Nan/V8 无关。这是所有现代浏览器使用多进程架构的关键原因之一。
当然,从多线程应用程序切换到多进程模型是有代价的:与其他进程交换数据(IPC,“进程间通信”)通常比协调几个进程更麻烦单个进程中的线程。
也就是说,人们有时会用不同的含义来使用“崩溃”一词,因此这里可能还有其他答案。例如。从 JavaScript 的角度来看,未处理的异常可以描述为“崩溃”——这很容易处理和恢复,甚至线程也不必为此而死。
此外,应用程序实际上必须处理崩溃进程的情况非常罕见(浏览器就是一个例子);大多数时候,开发人员的时间最好花在确保不会发生崩溃上,而不是在它们确实发生时尝试处理它们。 Node 本身应该足够稳定,不会崩溃;对于你自己的模块,设计(和调试,如果需要的话:-))它不会崩溃可能比设计(和测试)一个让它优雅地处理崩溃的方案更 feasible/effective。