2016-02-11 55 views
0

據我所知,併發不能並行,但我相信這是我關於併發的在只使用一個線程環境中的速度混亂的來源(去/節點)。併發代碼中的任務切換是否會導致比同步執行更快的代碼?

如果一切都在一個進程中運行,並調度是不同的併發任務之間不斷切換將不會被這種不斷切換引生成的代碼比如果一切都同步完成速度較慢執行的開銷?

我知道,併發有它的優勢,當你想非阻塞代碼,例如該服務成千上萬的請求,而不是隻專注於一個之間切換的網絡服務器,它閃耀在這方面;然而,我很難理解它是否實際上更快,或者如果併發只是出現會更快。

+0

誰說是更快? [阿姆達爾定律(https://en.wikipedia.org/wiki/Amdahl%27s_law) –

+0

@RemusRusanu我一直以爲這是快,直到我花了一些時間去思考它。我只想知道我現在是對還是錯。 – m0meni

+2

當存在一些IO界限活動(例如發送到網絡和從網絡接收數據)時,併發代碼是有效的。如果沒有併發性,您的單個線程必須等待呼叫才能完成。純粹的CPU綁定活動不會受益於單個線程的併發性(這可能會增加不必要的開銷),但是如果可以跨多個並行工作的CPU分佈工作負載,則可以受益於多線程。 –

回答

0

當存在一些IO界限活動(例如發送到網絡和從網絡接收數據)時,併發代碼是有效的。如果沒有併發性,您的單個線程必須等待呼叫才能完成。純粹的CPU綁定活動不會受益於單個線程的併發性(這可能會增加不必要的開銷),但是如果可以跨多個並行工作的CPU分佈工作負載,則可以受益於多線程。

異步IO的另一個優點是線程是螺紋。這節省了內存和操作系統資源。這是解決例如C10M問題的唯一方法。

相關問題