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

并發(fā)編程的方法

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

多進程并發(fā)

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

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

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

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