1)多進程和多核編程有什麼區別?需要多核編程技巧和技巧
2)對於多線程,我們需要通過互斥鎖和同步保存共享數據,那麼在多核上運行的程序如何?
3)如果我在程序中有一個進程並在多核環境中運行它?處理會更快還是不行?
1)多進程和多核編程有什麼區別?需要多核編程技巧和技巧
2)對於多線程,我們需要通過互斥鎖和同步保存共享數據,那麼在多核上運行的程序如何?
3)如果我在程序中有一個進程並在多核環境中運行它?處理會更快還是不行?
1)我假設你是指通過多進程將一個程序分成多個進程(通常在POSIX系統中使用fork()
方法完成),而不是多任務。多處理或多任務的通常定義是允許單個CPU看起來並行運行多個進程,通過它們之間進行切換。多核意味着單個CPU可以具有多個能夠執行任務的內核,並且所有執行單元都以某種方式連接(取決於處理器的體系結構)。除非你編寫非常低級的軟件,例如操作系統,否則這些東西通常不會影響你的編程。分叉過程(我相信你的意思)通常是通過操作系統提供的一些方法完成的,實際上是一個巨大的話題,你可以找到很多書。
2)操作系統通常提供底層CPU體系結構的抽象,這意味着作爲程序員不必關心你的PC是否有多核CPU或單核,所以如果你使用多線程,你仍然必須以同樣的方式分享您的數據。如果您正在編寫多核CPU的操作系統,那麼事情變得越來越難,您將不得不閱讀CPU支持的指令。 3)如果你的程序只有一個進程(並且沒有線程),那麼執行將(幾乎)相同,無論它是在單核還是多核系統上運行。它可以從多核系統獲得唯一的速度優勢,從操作系統將其推到一個內核上,其中沒有其他許多任務正在運行,從而以更少的任務交換機爲其提供更多的CPU時間。使用多核系統的真正收益只能通過使用並行編程來實現。