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

關(guān)于異步IO模型的疑問

只會(huì)PHP

最近在看unix網(wǎng)絡(luò)編程,發(fā)現(xiàn)有多種IO模型,workerman使用的是多路復(fù)用IO模型,該模型阻塞在select,poll調(diào)用上,但是可以接收多個(gè)套接字,實(shí)際的IO操作是阻塞的,stream_set_blocking設(shè)置非阻塞好像沒有什么作用,因?yàn)槎嗦窂?fù)用模型是在套接字可讀寫的時(shí)候才進(jìn)行讀寫操作。不知以上理解是否正確?

1948 2 2
2個(gè)回答

admin

l宏觀異步,實(shí)際阻塞

  • 暫無評(píng)論
法師

“實(shí)際的IO操作是阻塞的,stream_set_blocking設(shè)置非阻塞好像沒有什么作用”

我感覺這個(gè)說得不對(duì),實(shí)際操作是非阻塞的,stream_set_blocking設(shè)置非阻塞也有用,比如fread阻塞調(diào)用沒數(shù)據(jù)或者數(shù)據(jù)不夠會(huì)一直阻塞在fread,那其他socket就沒機(jī)會(huì)調(diào)用fread了。非阻塞掉用沒數(shù)據(jù)或者數(shù)據(jù)不夠會(huì)立刻返回,這樣不影響其它socket讀數(shù)據(jù)

  • phpcreeper 2022-04-19

    一般咱們看見的入門示例都是簡(jiǎn)單的bind listen accept read四步曲,其中沒有使用IO多路復(fù)用,stream_set_blocking設(shè)置為非阻塞以后,工作起來確實(shí)如你所言,fread非阻塞效果顯而易見,但問題關(guān)鍵就在于使用了IO多路復(fù)用,比如讀事件:當(dāng)檢測(cè)到socket可讀條件就緒的時(shí)候,就意味著數(shù)據(jù)已經(jīng)準(zhǔn)備好了可以讀了,所以此時(shí)觸發(fā)fread肯定是不會(huì)阻塞的,既然如此,這種上下文環(huán)境下的stream_set_blocking()無論是設(shè)置阻塞或非阻塞標(biāo)記位與否似乎都沒什么意義,所以猜題主的疑惑點(diǎn)應(yīng)該是在這里,我也有這樣的疑惑。

  • 只會(huì)PHP 2022-04-19

    所以感覺多路復(fù)用+ stream_set_blocking只是讓accept非阻塞,實(shí)際read還是阻塞的。

  • phpcreeper 2022-04-19

    不啊,調(diào)用read后是否導(dǎo)致進(jìn)程阻塞還是取決于stream_set_blocking的設(shè)置的,這點(diǎn)是確定的。

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