2011-11-26 20 views

回答

0

線程默認分享所有內容。進程默認情況下沒有共享。所以,唯一的區別在於分享的數量。認識到,Plan 9和Linux提供了一個系統調用(用於Plan 9的rfork(),用於Linux的clone()),可以創建一個新進程,一個新線程或兩者之間的內容。

某些平臺不支持fork()(例如:Win32,Java);這使得創建一個新的流程非常昂貴,這導致人們普遍認爲線程有助於提高性能。

線程比流程創建的要輕,但POSIX API可以非常高效地創建流程。但是,有些系統在創建新流程方面速度很慢。

在單個CPU計算機上,同一進程的線程之間的上下文切換可能比不同進程之間的上下文切換(例如:不需要刷新TLB)。您需要進行上下文切換,才能對性能產生重大影響。在SMP機器上,在不同內核中運行的線程之間共享數據可能意味着某些數據需要在高速緩存之間移動(高速緩存線彈跳)。預測多線程程序的性能可能很難。

安全方面,由於線程共享所有內容,這意味着線程之間沒有任何保護,所以從某種意義上說,它就像是回到虛擬內存操作系統之前的那些日子。對於複雜性,正確編寫多線程程序比正確編寫非多線程程序(有些人說難度更大)要困難得多。更糟糕的是,編寫多線程程序顯然比編寫事件驅動程序對初學者更簡單。

+0

某些處理器在內核之間共享緩存。考慮到具有共享緩存的四核處理器,多進程IPC如何與多線程共享內存進行比較? – user1066701

相關問題