python进程、线程、协程
基本觀點:
1、一個python進程一個GIL(全局鎖),每個線程需要獲取這個鎖才能執(zhí)行。
2、cpu密集型的程序,使用多進程。
3、IO密集型的程序,多線程可能會比多進程快。
4、多核cpu執(zhí)行多進程會不會比單進程快?答案是:會(如果進程切換開銷足夠小)。這個跟操作系統(tǒng)的調(diào)度算法有關(guān)系。參考:https://superuser.com/questions/257406/can-a-multi-core-processor-run-multiple-processes-at-the-same-time
5、線程之間切換會有很大的開銷,因此協(xié)程出現(xiàn)了,協(xié)程是用戶控制調(diào)度的輕量級線程,實際多個協(xié)程是屬于同個線程的,沒有切換開銷。python的協(xié)程可以通過yield、next、send關(guān)鍵字控制,也可以引入第三方庫gevent,更加方便。
對于3的觀點,假設(shè)以下兩種情況:
a、單進程多線程:1*100
b、多進程多線程:10*10
都是100個線程,cpu是10核心。對于b,10個進程占用10個核心,每個進程只有10個線程進行切換。對于a,100個線程之間的切換需要大量的開銷,總切換開銷比b多。
轉(zhuǎn)載于:https://www.cnblogs.com/mixerzhan/p/6806791.html
總結(jié)
以上是生活随笔為你收集整理的python进程、线程、协程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android onLoadFinish
- 下一篇: POJ 3252 数位DP