進程線程與協(xié)程
進程
? 進程是操作系統(tǒng)資源分配的基本單位
默認情況下一個進程提供一個線程(主線程),線程依附在進程里,一個進程可以創(chuàng)建多個線程蜘醋。
進程和線程的對比
? 進程是操作系統(tǒng)資源分配的基本單位鞭缭,線程是cpu調度的基本單位。
線程依附于進程存在碘举,沒有進程就沒有線程,進程索要資源搁廓,然后讓線程執(zhí)行相應的代碼引颈。
一個進程可創(chuàng)建多個線程。
進程之間不共享全局變量境蜕,線程之間共享蝙场,但是要注意資源競爭的問題,解決辦法(互斥鎖或者線程同步)汽摹。
多進程開發(fā)比單進程多線程開發(fā)穩(wěn)定性要強李丰,因為某一個進程掛了不會影響其他進程運行。
多進程開發(fā)比單進程多線程開發(fā)資源消耗大逼泣,因為每啟動一個進程都需要向操作系統(tǒng)索要運行資源趴泌,但是線程可以共享進程中的資源,極大的提高了程序的運行效率拉庶。
進程線程協(xié)程的對比
? 先有進程嗜憔,進程里提供線程,線程里包含多個協(xié)程氏仗。
進程是操作系統(tǒng)資源分配的基本單位吉捶,默認提供一個線程去執(zhí)行代碼。
線程是cpu調度的基本單位皆尔,cpu調度那個線程呐舔,那個線程去執(zhí)行對應的代碼。
進程之間不共享全局變量慷蠕, 線程之間共享全局變量珊拼,但是要注意點資源競爭數據錯誤的問題,解決辦法:互斥鎖流炕。
多進程開發(fā)比單進程多線程開發(fā)穩(wěn)定性要強澎现,但是資源開銷要大仅胞。
線程之間執(zhí)行是無序的,協(xié)程之間按照一定順序交替執(zhí)行的剑辫。
協(xié)程主要用在網絡爬蟲干旧,網絡請求,以后大家主要線程或者協(xié)程完成多任務妹蔽。
開辟協(xié)程大概需要5k,開辟線程大概需要512k椎眯, 開辟進程需要資源更多。
最重要的是讹开,協(xié)程不是被操作系統(tǒng)內核所管理盅视,而完全是由程序所控制(也就是在用戶態(tài)執(zhí)行)。
這樣帶來的好處就是性能得到了很大的提升旦万,不會像線程切換那樣消耗資源。