發(fā)布時(shí)間:2021-09-22 16:47:44來源:轉(zhuǎn)載
PHP 多進(jìn)程和多線程是什么?PHP 多進(jìn)程和多線程有什么區(qū)別,小編今天為大家介紹PHP 多進(jìn)程和多線程的優(yōu)缺點(diǎn)。
多進(jìn)程
1.使用多進(jìn)程, 子進(jìn)程結(jié)束以后, 內(nèi)核會(huì)負(fù)責(zé)回收資源
2.使用多進(jìn)程, 子進(jìn)程異常退出不會(huì)導(dǎo)致整個(gè)進(jìn)程Thread退出. 父進(jìn)程還有機(jī)會(huì)重建流程.
3.一個(gè)常駐主進(jìn)程, 只負(fù)責(zé)任務(wù)分發(fā), 邏輯更清楚.
4.多進(jìn)程方式更加穩(wěn)定,另外利用進(jìn)程間通信(IPC)也可以實(shí)現(xiàn)數(shù)據(jù)共享。
5.共享內(nèi)存,這種方式和線程間讀寫變量是一樣的,需要加鎖,會(huì)有同步、死鎖問題。
6.消息隊(duì)列,可以采用多個(gè)子進(jìn)程搶隊(duì)列模式,性能很好
多線程
1.線程是在同一個(gè)進(jìn)程內(nèi)的,可以共享內(nèi)存變量實(shí)現(xiàn)線程間通信
2.線程比進(jìn)程更輕量級(jí),開很大量進(jìn)程會(huì)比線程消耗更多系統(tǒng)資源
3.多線程也存在一些問題:
4.線程讀寫變量存在同步問題,需要加鎖
5.鎖的粒度過大存在性能問題,可能會(huì)導(dǎo)致只有1個(gè)線程在運(yùn)行,其他線程都在等待鎖
6.同時(shí)使用多個(gè)鎖,邏輯復(fù)雜,一旦某個(gè)鎖沒被正確釋放,可能會(huì)發(fā)生線程死鎖
7.某個(gè)線程發(fā)生致命錯(cuò)誤會(huì)導(dǎo)致整個(gè)進(jìn)程崩潰