最近面試了很多同學,發現一個共同問題,都覺着單核cpu無法并發計算,如果應用部署在單核cpu上,多線程就無法生效,其實這是錯誤的了解。
并發的概念本身就是針對單核cpu來提出的,多線程在一個cpu也是可以搶占資源,切換排程的,對使用者是無感覺的。
并行是針對多核cpu來說的,并行是運作在不同cpu核心上,是以不存在資源搶占,切換排程。
一個應用部署在多核cpu上,可能是并行,也可能是并發,這取決于當時的應用情況以及cpu的排程算法。如果任務線程太多,并行無法滿足,那必然會并發執行。
應用能支援多少并發,一方面取決于硬體資源,一方面也看應用是計算型應用,還是io型應用,大多數應用都是io型的,如果是io型應用能支援的線程并發數就會很多。
網上流行io型應用線程公式2*n+1,這個公式其實并不準确,大多數情況下還得以自己實踐為準,線程太高導緻cpu頻繁搶占切換排程,浪費性能,線程太少又發揮不出應有的性能。
不管并發還是并行都是為了提高性能。