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

workerman異步任務(wù)問題

icy2003

我有一個(gè)worker1作為客戶端,創(chuàng)建了一批任務(wù)(假設(shè)有400個(gè)),希望通過AsyncTcpConnection實(shí)現(xiàn)異步,然后開了另一個(gè)worker2,建立一個(gè)worker1 到worker2的連接
通過foreach send 給worker2 發(fā)送數(shù)據(jù),經(jīng)過我的測試發(fā)現(xiàn),在linux下,即便我給worker2開了100個(gè)進(jìn)程(count = 100),結(jié)果在worker2這邊收到數(shù)據(jù)時(shí)候的進(jìn)程id都是一樣的
我的問題是:
1、是不是一個(gè)worker1和worker2的連接,worker1每次send的時(shí)候,worker2那邊接收都用的是同一個(gè)進(jìn)程。如果是這樣,那count好像就沒有意義了,因?yàn)槲胰绻?00個(gè)任務(wù)分發(fā)給worker2去處理,似乎必須要在worker1上創(chuàng)建400個(gè)worker1到worker2的連接
2、上面的是我測試之后的結(jié)果,不曉得是不是這樣,或者說我對(duì)進(jìn)程理解有問題。然后是,如果我希望將400個(gè)任務(wù)發(fā)給worker2不同進(jìn)程,又不希望worker1創(chuàng)建太多連接,應(yīng)該怎么做?
3、文檔上對(duì)于這一塊的例子是把那個(gè)send的任務(wù)當(dāng)做一個(gè)耗時(shí)操作去看的,現(xiàn)在我有n多任務(wù),所有任務(wù)執(zhí)行算是一個(gè)耗時(shí)操作(而不是多個(gè)),如果需要實(shí)現(xiàn)這種需求,正確的設(shè)計(jì)應(yīng)該是怎么樣的
這三個(gè)問題意思差不多,可能是我的理解錯(cuò)了,希望大大指正(如果真的是理解錯(cuò)了,那應(yīng)該不需要三個(gè)問題都回答了)

6183 1 0
1個(gè)回答

walkor 打賞

總的來說操作系統(tǒng)為了降低負(fù)載會(huì)盡量減少進(jìn)程間切換,當(dāng)一個(gè)進(jìn)程能瞬間做完的事情不會(huì)分配給多個(gè)進(jìn)程去處理,而獲連接是瞬間就可以完成的事情,所以連接都被幾個(gè)進(jìn)程獲得的幾率就會(huì)很大。如果測試改成發(fā)起連接發(fā)送數(shù)據(jù),發(fā)起連接發(fā)送數(shù)據(jù),這樣的測試方式,那么就會(huì)大大改善。
?
如果你的php版本是php7,那么可以設(shè)置$worker2->reusePort = true; 這樣就可以讓操作系統(tǒng)平均分配連接給多個(gè)進(jìn)程。
?
如果不是php7,可以在onConnect的時(shí)候調(diào)用下$worker2->puseAccept(),這樣這個(gè)進(jìn)程就會(huì)暫停獲取連接,然后在發(fā)送完數(shù)據(jù)后調(diào)用$worker2->resueAccept()恢復(fù)獲取連接。

  • icy2003 2018-12-02

    我測試了一下,如果是“連接發(fā)送,連接發(fā)送”的方式去發(fā)送任務(wù),雖然worker2會(huì)用多個(gè)進(jìn)程去接收,但是執(zhí)行順序全亂了,如果我希望worker2是用多進(jìn)程去處理數(shù)據(jù),但是處理的時(shí)候按照任務(wù)的順序去處理的,那應(yīng)該怎么做呢

  • icy2003 2018-12-02

    而且很奇怪的是,我用同樣的測試數(shù)據(jù)去跑,亂的順序居然也是一樣的

  • walkor 2018-12-03

    如果你要想任務(wù)1完成后再運(yùn)行任務(wù)2,這樣沒必要用多進(jìn)程,用一個(gè)進(jìn)程即可。

年代過于久遠(yuǎn),無法發(fā)表回答
??