簡體   English   中英

線程並行

[英]Parallelism in threads

線程中的並行性是否也可以使單個CPU系統中的進程受益? 我知道它們可以在其他系統中提供幫助,但是如果它們確實也可以使單個CPU系統受益,我感到困惑。

如果不使用線程,則會遇到一些痛苦的問題。 假設您正在執行可能會阻止但可能不會阻止的操作。 您可以找到一些異步的方法來完成此操作,但這會使編程變得更加復雜,並且如果它很少被阻塞,那么收益將不大。 但是,如果您同步執行此操作,那么在極少數情況下它會阻塞,您的整個過程不會向前推進。

頁面錯誤就是一個很好的例子。 考慮服務器是否遇到錯誤,並且必須運行代碼來記錄該錯誤。 該代碼可能不在內存中,可能需要進行磁盤操作才能讀入該代碼。您是否希望整個服務器在該磁盤操作完成之前不進行任何轉發?

您可以將線程用作異步I / O的機制,例如,使多個磁盤和網絡負載處於運行狀態,即使在單處理器系統上也可以使用。

大多數操作系統具有異步或非阻塞IO API,這些API使您可以通過單線程進程執行相同的操作,但是對於某些應用程序來說可能不太方便。

請參閱POSIX異步I / O(AIO)的狀態是什么? 進行一些討論:例如,基於事件的非阻塞I / O通常比“數十億個阻塞線程”要好得多,在“數十億個阻塞線程”中,您同時等待的每個I / O操作都有一個單獨的線程。

所以無論如何,是的,您可以在單核(沒有超線程或其他SMT )系統上有用地使用線程,而不需要進行數字運算吞吐量。 (但是,獲得I / O並發性或並行性或您想調用的任何其他方法通常會更好。)


還有其他用例,例如游戲,其中一個線程運行GUI,另一個線程運行模擬。 讓OS安排它們可能比在“檢查線程是否要更新GUI”檢查或在模擬線程中插入更為簡單。

(或者實際上使用GUI +計算的任何東西,因為您不想從計時器的信號處理程序中運行GUI。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM