2011-01-05 856 views
5

我有兩個noob問題:如果一個線程在進程中崩潰會發生什麼?

1)爲什麼node.js正在一個線程中運行?爲什麼不只是使用流程本身呢? 或者在線程而不是進程中運行它有什麼好處?

2)如果進程中的線程崩潰(我知道,未處理的異常會導致進程退出)會發生什麼,但是如果正確catch'd會發生什麼?或者浮點異常等異常。 這個過程是否也會崩潰?

回答

3

我想你對這種情況下「單線程」的含義有點困惑。 Node.js本身利用後臺中的多個線程以異步方式處理阻塞調用。

JavaScript引擎Node.js核心是單線程的。缺乏多線程和事件循環的可用性使得編程變得更加容易。總之,您不必處理多線程帶來的所有併發問題,您的代碼通過這種方式變得更加確定。

在線程崩潰的情況下,這是否是唯一的一個或多個是完全不相關的,如果代碼崩潰,您可以希望的最好的事情是程序隨之死亡,沒有什麼比您編程更麻煩繼續以部分損壞的狀態運行。想象一下,崩潰的線程負責將數據保存到磁盤,現在您的程序會繼續運行而不會再次保存。

0
  1. node.js被設計爲非常輕量級,並且只在需要時調用。所以每個線程處理一個請求然後退出。如果你調用/ mypage,node.js將處理請求,然後終止。這可以在保持較小的佔用空間的情況下實現更好的性能
  2. 如果存在異常,並且處理得當,那麼它將根據您如何定義它來引發錯誤。 Javascript是全語言還是無語言。任何錯誤都會導致javascript拋出錯誤和崩潰,這就是爲什麼你需要確保你處理所有可能的錯誤。
0

在進程或單線程中運行程序是一回事。每個進程都有一個主線程。根據編程語言和平臺的不同,可以使用其他線程同時運行程序的一部分。 Node.js沒有可能啓動額外的線程。

這樣,除了啓動新進程外,您不可能同時運行程序的各個部分。單個進程中的多個線程共享相同的內存,而進程不共享。當你需要在進程間共享信息時,你必須使用消息傳遞。

消息傳遞的缺點是它比通過內存共享信息要慢。優點是你不必推理你的內存中對象的可變狀態,以及如何確保這些對象不會變得不一致。

相關問題