国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

請(qǐng)問(wèn)使用多進(jìn)程時(shí),是根據(jù)什么規(guī)則將多個(gè)連接分配給各個(gè)進(jìn)程的?

t182848232

事情的背景是這樣的,我想一次抓取多個(gè)網(wǎng)頁(yè)的內(nèi)容,簡(jiǎn)單的做法可以是把網(wǎng)址放進(jìn)數(shù)組里,foreach遍歷出來(lái)一個(gè)個(gè)抓取。但這樣是同步的,耗時(shí)比較長(zhǎng),所以我想用異步多進(jìn)程來(lái)實(shí)現(xiàn)。
我參考了workman手冊(cè)http://doc.workerman.net/faq/async-task.html,寫(xiě)了類似的代碼。
其中task worker的進(jìn)程數(shù)是5,實(shí)現(xiàn)抓取一個(gè)網(wǎng)頁(yè)的業(yè)務(wù)。
而主worker的進(jìn)程數(shù)是1,接收到網(wǎng)址數(shù)組后,比如是25個(gè)網(wǎng)址,就建立25個(gè)AsyncTcpConnection將它們一一分發(fā)給task worker進(jìn)行抓取。
代碼運(yùn)行的結(jié)果返回如下:
(每一行代表一個(gè)要抓取的網(wǎng)頁(yè),記錄了執(zhí)行這次抓取的task worker的id,以及抓取的用時(shí))
(最后一行是總用時(shí))

[attach]496[/attach]

這個(gè)結(jié)果是我希望得到的結(jié)果,25個(gè)網(wǎng)址,5個(gè)進(jìn)程每個(gè)分別執(zhí)行了5次,平均每次抓取0.25秒,總用時(shí)1.36秒也和0.25*5很接近。
但我發(fā)現(xiàn)類似這種25個(gè)任務(wù)平均分配給5個(gè)進(jìn)程的情況很少出現(xiàn)。經(jīng)常出現(xiàn)有的進(jìn)程執(zhí)行很多次任務(wù),而有的只執(zhí)行1次。甚至?xí)霈F(xiàn)25個(gè)任務(wù)全都分配給1個(gè)進(jìn)程的情況,這時(shí)總用時(shí)達(dá)到了6秒 ,相當(dāng)于單進(jìn)程的做法?
請(qǐng)問(wèn)使用多進(jìn)程時(shí)是不是要注意什么規(guī)則?
(本人最近剛學(xué)習(xí)workman,對(duì)php的多進(jìn)程也不太熟,希望各位前輩多指點(diǎn))

6673 2 0
2個(gè)回答

walkor 打賞

因?yàn)閣orkerman的網(wǎng)絡(luò)io是異步非阻塞的,一個(gè)進(jìn)程可以處理多個(gè)鏈接的IO事件,包括鏈接事件。
當(dāng)瞬間給workerman發(fā)起多個(gè)異步鏈接時(shí),workerman處理鏈接事件速度處理很快,一個(gè)進(jìn)程瞬間完全可以處理多個(gè)鏈接事件,導(dǎo)致鏈接分配不是很均勻,操作系統(tǒng)為了減少進(jìn)程切換開(kāi)銷,會(huì)盡量用當(dāng)前占有cpu的進(jìn)程處理這些鏈接事件,有的進(jìn)程維持的連接數(shù)多,有的少,導(dǎo)致任務(wù)分配并不是百分百均勻,是正常現(xiàn)象。

有一些方案可以解決這個(gè)問(wèn)題。
比如給Workerman添加一個(gè)pauseAccept接口和resumeAccept接口,即在task的onConnect時(shí)調(diào)用pauseAccept暫停接受新客戶端鏈接,這樣只會(huì)處理當(dāng)前鏈接的請(qǐng)求,處理完后調(diào)用resumeAccept,繼續(xù)接受其它鏈接請(qǐng)求。

再比如設(shè)計(jì)一個(gè)進(jìn)程模型,分成兩種組進(jìn)程A B,A組進(jìn)程只負(fù)責(zé)把異步請(qǐng)求收集起來(lái),放到一個(gè)隊(duì)列里面,B組進(jìn)程負(fù)責(zé)在從隊(duì)列里面獲取,這樣也能保證異步任務(wù)請(qǐng)求能夠更快更均勻的被各個(gè)進(jìn)程處理。這個(gè)可以看下 https://github.com/walkor/workerman-queue

還有一些其它的方案等待你去探索

  • dignfei 2020-03-13

    請(qǐng)問(wèn) pauseAccept接口和resumeAccept接口 在哪里?

  • walkor 2020-03-14

    這個(gè)是很老得帖子了,現(xiàn)在只要workerman >= 3.5.21 并且 PHP>=7.0時(shí) worekrman會(huì)自動(dòng)平均分配連接

dignfei

請(qǐng)問(wèn) pauseAccept接口和resumeAccept接口 在哪里? 實(shí)現(xiàn)了嗎?有文檔嗎?

  • 暫無(wú)評(píng)論
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??