我找到了答案,在協(xié)程中使用全局變量確實(shí)是會(huì)互相干擾,只是我下面的代碼是開多個(gè)進(jìn)程處理的,恰好兩次請(qǐng)求是兩個(gè)進(jìn)程,所以是兩份全局變量。改成只開1個(gè)進(jìn)程,就會(huì)發(fā)現(xiàn)協(xié)程污染的問題了
目前在已有的webman項(xiàng)目中想使用swoole的協(xié)程,所以Event-loop切換成了swoole。
在控制器中的協(xié)程環(huán)境中,使用全局靜態(tài)變量,按理說兩次請(qǐng)求(兩個(gè)協(xié)程)操作全局變量應(yīng)該會(huì)污染的啊,但是實(shí)際上并沒有發(fā)現(xiàn)污染,是webman已經(jīng)做了上下文處理了么?
如下圖
按照代碼邏輯來看,
第一次請(qǐng)求參數(shù)a=1時(shí),當(dāng)前請(qǐng)求的協(xié)程A會(huì)先修改全局變量為aaa,然后協(xié)程掛起5秒;
第二次請(qǐng)求參數(shù)a=2時(shí),當(dāng)前請(qǐng)求的協(xié)程B會(huì)直接修改全局變量為bbb,然后返回給客戶端
問題:
如果在五秒內(nèi)依次請(qǐng)求上述兩個(gè)請(qǐng)求,請(qǐng)求1在5秒?yún)f(xié)程恢復(fù)后,應(yīng)該已經(jīng)被請(qǐng)求2污染了啊,輸出的全局變量bbb的值啊,為什么我測(cè)試的結(jié)果依舊是正確的,即請(qǐng)求1輸出aaa,請(qǐng)求2輸出bbb