說到多線程編程,那么就不得不提并行并發(fā),多線程是實現(xiàn)并發(fā)(并行)的一種手段。并行是指兩個或多個獨立的操作同時進(jìn)行。注意這里是同時進(jìn)行,區(qū)別于并發(fā),在一個時間段內(nèi)執(zhí)行多個操作。在單核時代,多個線程是并發(fā)的,在一個時間段內(nèi)輪流執(zhí)行;在多核時代,多個線程可以實現(xiàn)真正的并行,在多核上真正獨立的并行執(zhí)行。例如現(xiàn)在常見的4核4線程可以并行4個線程;4核8線程則使用了超線程技術(shù),把一個物理核模擬為2個邏輯核心,可以并行8個線程。

并發(fā)編程的方法

通常,要實現(xiàn)并發(fā)有兩種方法:多進(jìn)程和多線程。

多進(jìn)程并發(fā)

使用多進(jìn)程并發(fā)是將一個應(yīng)用程序劃分為多個獨立的進(jìn)程(每個進(jìn)程只有一個線程),這些獨立的進(jìn)程間可以互相通信,共同完成任務(wù)。由于操作系統(tǒng)對進(jìn)程提供了大量的保護(hù)機制,以避免一個進(jìn)程修改了另一個進(jìn)程的數(shù)據(jù),使用多進(jìn)程比多線程更容易寫出安全的代碼。但這也造就了多進(jìn)程并發(fā)的兩個缺點:

  • 在進(jìn)程件的通信,無論是使用信號、套接字,還是文件、管道等方式,其使用要么比較復(fù)雜,要么就是速度較慢或者兩者兼而有之。

  • 運行多個線程的開銷很大,操作系統(tǒng)要分配很多的資源來對這些進(jìn)程進(jìn)行管理。

由于多個進(jìn)程并發(fā)完成同一個任務(wù)時,不可避免的是:操作同一個數(shù)據(jù)和進(jìn)程間的相互通信,上述的兩個缺點也就決定了多進(jìn)程的并發(fā)不是一個好的選

網(wǎng)友評論