日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

swoole mysql 协程_关于协程的优点以及swoole 协程的用法

發布時間:2025/3/21 数据库 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 swoole mysql 协程_关于协程的优点以及swoole 协程的用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在上篇文章中php yield關鍵字以及協程的實現? 我們講到了協程的原理以及運行步驟.

現在我們來繼續看下協程的執行順序.

協程的運行是交叉式運行(串行),只要你發起了一次協程切換,則會立馬暫停當前協程,去運行下一個協程,直到下次代碼調度回協程.

協程的優點

看到上面的執行順序,你可能還是不能理解協程的優點,這個其實是一個很簡單的概念,舉個例子:

小明燒開水需要10分鐘,刷牙需要3分鐘,吃早餐需要5分鐘,請問做完這些事情總共需要多少分鐘?

答案是10分鐘,因為在燒開水這個步驟時,不需要坐在那里看水壺燒(異步,io耗時)可以先去刷牙,然后去吃早餐

協程的優點主要在于這里,當遇上io耗時的情況時,這部分的等待時間我們其實可以節約出來,去先處理其他代碼邏輯的,直到io完成再繼續執行之前的代碼.

沒錯,協程的優點就在于這個.

swoole協程

在swoole中,已經自帶了協程管理器,以及異步io的擴展(redis.mysql,http客戶端等),我們只要安裝好swoole擴展,就可以直接使用協程了,例如以下代碼:$start_time?=?time();

/*for?($i?=?0;?$i?<=?500;?$i++)?{

go(function?()use($i,$start_time){

$cli?=?new?Swoole\Coroutine\Http\Client('www.baidu.com',?443,true);

$cli->setHeaders([

'Host'?=>?"www.baidu.com",

"User-Agent"?=>?'Chrome/49.0.2587.3',

'Accept'?=>?'text/html,application/xhtml+xml,application/xml',

'Accept-Encoding'?=>?'gzip',

]);

$cli->set([?'timeout'?=>?0.11]);

$cli->get('/');

$cli->close();

echo??"協程{$i}已完成,耗時".(time()-$start_time).PHP_EOL;

});

}*/

$start_time?=?time();

for?($i?=?0;?$i?<=?500;?$i++)?{

$url?????=?'https://www.baidu.com/';

$content?=?file_get_contents($url);

echo?"普通{$i}已完成\n";

}

echo?"非攜程完成時間:"?.?(time()?-?$start_time);

在非協程環境,它的執行順序和執行時間如下:

而在注釋掉非協程代碼,協程環境運行下,它的執行順序和時間如下:

為什么會這樣呢?我說下具體的流程:

非協程流程

1:先執行$i=0

2:通過file_get_contents獲取網頁內容

3:獲取成功后在進行輸出: 普通0已完成

4:繼續執行$i=1

...

協程流程

1:先執行$i=0

3:協程切換不等待獲取網頁內容,直接跳到$i=1

....

n:$i=0的請求內容已經完成,切換回$i=0后面的代碼,輸出"協程0已完成,耗時0"

n+1:通過異步client類,去請求https://www.baidu.com,協程切換不等待獲取網頁內容,直接跳到$i=n+2

n+2:$i=n的請求內容已經完成,切換回$i=n后面的代碼,輸出"協程n已完成,耗時5"

....

由這2個流程可以看出一個不同之處:非協程需要等待請求網頁的時間,而協程直接跳過了等待的時間,繼續往下執行,

也就是上面說的"小明燒開水的時間先去刷牙"

然后,由于協程沒有了io耗時,執行速度大大提高,假設請求一次網站需要0.05秒,那500次循環就相當于節省了25秒,這就是為什么協程適合在高并發io場景的原因了

本文為仙士可原創文章,轉載無需和我聯系,但請注明來自仙士可博客www.php20.cn

總結

以上是生活随笔為你收集整理的swoole mysql 协程_关于协程的优点以及swoole 协程的用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。