国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

golang - php 通過 yield 實現(xiàn)協(xié)程有什么使用場景?
某草草
某草草 2017-07-03 11:40:23
0
3
1714

看到一篇文章 PHP 使用協(xié)同程序?qū)崿F(xiàn)合作多任務(wù),講的是通過 php 的 yield 實現(xiàn)了協(xié)程。但是文章太長沒有看完,大致看了一下。

  • PHP 的協(xié)程在項目中什么時候會用上?

  • 或者有沒有適用的場景?

  • 目前有對其封裝的庫嗎?

某草草
某草草

全部回復(fù)(3)
Ty80

協(xié)程可以用在,異步網(wǎng)絡(luò) IO 的時候,使其成為非阻塞的。

比如你在一個 http 請求里面,你需要請求外面的接口,那么會有下面的場景。

你的前置 server 是 nginx,nginx 是非阻塞異步的,但是 php-fpm 是同步阻塞的。那么當你在請求外面接口的時候,這個任務(wù)就會被阻塞。(這里補充一下,php-fpm 的 Worker 進程是同步阻塞的)

假設(shè)你使用協(xié)程,那么當你在請求接口的時候,你的這個任務(wù)就可以暫停,保存上下文。然后呢,當你的接口返回了之后,重新調(diào)起這個任務(wù)繼續(xù)執(zhí)行。你的進程就不必耗在這一個任務(wù)上了,可以去處理其它的 http 請求了。這樣是不是并發(fā)量就高了?

同理,當你的請求在查詢數(shù)據(jù)庫的時候,也是一個 IO 請求,也是同步的。協(xié)程就可以讓你這些 IO 編程異步非阻塞的,從而增大你的并發(fā)量。這主要是讓你的 CPU 可以在等待 IO 的時候,可以處理別的事情。所有的 IO 請求都可以通過協(xié)程做到這一點。

你的這篇文章我看過,是很好的一篇文章。這里作者用 yield 實現(xiàn)了一個任務(wù)調(diào)度,就是干我上面說的那些事情的。你也可以看看鳥哥翻譯的 http://www.laruence.com/2015/...,可以說是對你看到的這個翻譯的一個補充。他通過 yield 實現(xiàn)了一個異步非阻塞的服務(wù)器,當然只是一個 demo 啦。有個例子看起來應(yīng)該會好一點。

僅有的幸福

目前我遇到的,看到laravel框架model以游標方式取數(shù)據(jù)時,用的是yield來防止一次性取數(shù)據(jù)太多導(dǎo)致內(nèi)存不足的問題

某草草

最基礎(chǔ)的是導(dǎo)入或者導(dǎo)出大量數(shù)據(jù)到excel,假設(shè)導(dǎo)出/導(dǎo)出過程需要對數(shù)據(jù)進行處理一下,這個時候可以用。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板