V5版本 redis 和 http 已經(jīng)走協(xié)程了
請(qǐng)問mysql協(xié)程版會(huì)開發(fā)嗎??
假如mysql協(xié)程版開發(fā)出來了,
是不是workerman處理http請(qǐng)求的時(shí)候就可以直接開協(xié)程來處理請(qǐng)求啦??
workerman官方預(yù)計(jì)不會(huì)出協(xié)程版MySQL客戶端。原因如下:
PHP實(shí)現(xiàn)MySQL客戶端性能差
PHP層面實(shí)現(xiàn)MySQL客戶端需要使用PHP解析MySQL協(xié)議,PHP解析協(xié)議過程中相比PDO會(huì)消耗更多的CPU,導(dǎo)致整體性能不如直接使用阻塞PDO
PHP MySQL連接池缺陷
為了發(fā)揮協(xié)程優(yōu)勢需要使用MySQL連接池。而PHP是多進(jìn)程單線程的,多進(jìn)程間無法復(fù)用MYSQL連接池,需要每個(gè)進(jìn)程開啟MYSQL連接池。例如64個(gè)進(jìn)程,每個(gè)進(jìn)程開啟一個(gè)10個(gè)連接的MySQL連接池,一臺(tái)服務(wù)器的總連接數(shù)可能達(dá)到640個(gè),很容易把MySQL連接數(shù)占滿。這種連接池機(jī)制會(huì)導(dǎo)致系統(tǒng)擴(kuò)展性很差。
MySQL連接數(shù)越多,性能越差
連接池機(jī)制會(huì)導(dǎo)致有更多的空閑連接,而MySQL連接數(shù)越多,性能越差,即使其中大部分是空閑連接。這就導(dǎo)致很多使用了MySQL連接池的應(yīng)用性能不如直接用PDO阻塞調(diào)用的原因。
引入?yún)f(xié)程會(huì)讓應(yīng)用變得復(fù)雜
引入?yún)f(xié)程會(huì)導(dǎo)致應(yīng)用開發(fā)變得復(fù)雜,需要時(shí)刻考慮上下文問題,一些組件需要改造才能使用,例如數(shù)據(jù)庫組件。webman一直體長簡單、穩(wěn)定、高性能。引入PHP實(shí)現(xiàn)的MySQL協(xié)程后性能肯定不會(huì)提高,簡單和穩(wěn)定性也受到挑戰(zhàn)。
第三方協(xié)程客戶端
預(yù)計(jì)會(huì)有第三方開發(fā)出基于fiber的MySQL協(xié)程客戶端,到時(shí)候應(yīng)該可以直接在webman中使用。
對(duì)于MySQL協(xié)程情有獨(dú)鐘的可以在webman中開啟swoole驅(qū)動(dòng),開啟后可以使用swoole的協(xié)程,注意使用swoole協(xié)程后就無法使用laravel以及thinkphp的orm,因?yàn)樗麄兪遣恢С謪f(xié)程的。