我有兩個noob問題:如果一個線程在進程中崩潰會發生什麼?
1)爲什麼node.js正在一個線程中運行?爲什麼不只是使用流程本身呢? 或者在線程而不是進程中運行它有什麼好處?
2)如果進程中的線程崩潰(我知道,未處理的異常會導致進程退出)會發生什麼,但是如果正確catch'd會發生什麼?或者浮點異常等異常。 這個過程是否也會崩潰?
我有兩個noob問題:如果一個線程在進程中崩潰會發生什麼?
1)爲什麼node.js正在一個線程中運行?爲什麼不只是使用流程本身呢? 或者在線程而不是進程中運行它有什麼好處?
2)如果進程中的線程崩潰(我知道,未處理的異常會導致進程退出)會發生什麼,但是如果正確catch'd會發生什麼?或者浮點異常等異常。 這個過程是否也會崩潰?
我想你對這種情況下「單線程」的含義有點困惑。 Node.js本身利用後臺中的多個線程以異步方式處理阻塞調用。
JavaScript引擎Node.js核心是單線程的。缺乏多線程和事件循環的可用性使得編程變得更加容易。總之,您不必處理多線程帶來的所有併發問題,您的代碼通過這種方式變得更加確定。
在線程崩潰的情況下,這是否是唯一的一個或多個是完全不相關的,如果代碼崩潰,您可以希望的最好的事情是程序隨之死亡,沒有什麼比您編程更麻煩繼續以部分損壞的狀態運行。想象一下,崩潰的線程負責將數據保存到磁盤,現在您的程序會繼續運行而不會再次保存。
在進程或單線程中運行程序是一回事。每個進程都有一個主線程。根據編程語言和平臺的不同,可以使用其他線程同時運行程序的一部分。 Node.js沒有可能啓動額外的線程。
這樣,除了啓動新進程外,您不可能同時運行程序的各個部分。單個進程中的多個線程共享相同的內存,而進程不共享。當你需要在進程間共享信息時,你必須使用消息傳遞。
消息傳遞的缺點是它比通過內存共享信息要慢。優點是你不必推理你的內存中對象的可變狀態,以及如何確保這些對象不會變得不一致。