執行多個任務可以使用多線程或多進程。
多進程中,同一個變量,各自有一份拷貝存在于每個進程中,互不影響
多線程中,所有變量都由所有線程共享。而線程間的切換是系統進行調度,無法控制,所以可能
一個進程中的多個線程可能會同時調用某個變量的值,造成變量值的混亂,這時就引進了線程鎖,但是線程鎖又容易造成死鎖,也阻止了多線程的并發。
另外Python 解釋器由于設計時有GIL全局鎖,導致了多線程無法利用多核。多線程的并發在Python中就是一個美麗的夢。
?
在Thread和Process中,應當優選Process,因為Process更穩定,而且,Process可以分布到多臺機器上,而Thread最
多只能分布到同一臺機器的多個CPU上。
多進程會消耗系統較多的資源,系統支持的進程數也有限,雖然運行任務較穩定
多線程的單個線程崩潰就會使整個進程崩潰,又有線程全局鎖。
?
異步IO支持,就可以用單進程單線程模型來執行多任務,這種全新的模型稱為事件驅動模型。
協程就是一個異步IO的支持模式。協程這種子程序,可以在執行的時候中斷,等需要耗時的操作執行完后發消息通知主線程,
然后再接著從剛才中斷的地方繼續執行。這樣在任務間的切換是通過程序內部定義來控制的,也不需要線程鎖,執行效率高。