python不僅執行緒用的是系統原生執行緒,程式也是用的原生程式
程式的用法和執行緒大同小異
import multiprocessing p = multiprocessing.Process(target=fun,args=())
執行緒的基本方法在程式中都能夠使用
但是程式和執行緒中有一個明顯的區別:可以實現多核的運用
python本身會啟動一個主程式,並且擁有一個主執行緒把主程式看做一家之主,那主執行緒也是他本身,其他執行緒就相當於老婆們
而程式,長大了的兒子們,執行緒固然是不能分割的,一家人還是要團結,但是兒子自家的事務,老子卻也不能插手,所以,一家只能佔用一個CPU實現單核運用的話,生多個兒子那必然就實現了多核運用
GIL鎖住的,只是一個程式,讓一家人團結
但是一個程式只有這麼一把全量鎖,執行緒不能單獨跑,那就打包一起跑
多程式就這樣完成了一般語言中多執行緒的最佳化
資料傳遞
多執行緒,多程式中總有要協同的工作,都涉及資料的互動,不過互動方式有些不同
資訊進行傳遞的時候,為了不阻塞執行一般會將資料放入對列當中而不是直接返回
執行緒中,由於都屬於同一個程式,定義一個全域性的佇列在各執行緒中就能夠壓入資料
程式可能執行在不同的CPU上,因此,相互間的傳遞不能在全域性定義,只能透過建立時進行傳入
內部操作:傳入的佇列實際上並不是將引用傳入,然後直接操作佇列,這畢竟是不同的CPU上的工作
佇列的傳入實際上是佇列複製的傳入,透過pickle複製後進行傳入,然後再pickle將資料傳回
import multiprocessing multiprocessing.Queue()
執行緒和程式都有不同的佇列物件,以實現不同的資料互動,不能錯位使用