swoole協(xié)程和異步區(qū)別是什么-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)swoole協(xié)程和異步區(qū)別是什么的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

成都創(chuàng)新互聯(lián)公司,為您提供網(wǎng)站建設公司、重慶網(wǎng)站制作、網(wǎng)站營銷推廣、網(wǎng)站開發(fā)設計,對服務人造霧等多個行業(yè)擁有豐富的網(wǎng)站建設及推廣經(jīng)驗。成都創(chuàng)新互聯(lián)公司網(wǎng)站建設公司成立于2013年,提供專業(yè)網(wǎng)站制作報價服務,我們深知市場的競爭激烈,認真對待每位客戶,為客戶提供賞心悅目的作品。 與客戶共同發(fā)展進步,是我們永遠的責任!

從4.0版本開始Swoole提供了完整的協(xié)程(Coroutine)+ 通道(Channel)特性,帶來全新的CSP編程模型。

應用層可使用完全同步的編程方式,底層自動實現(xiàn)異步IO。

go(function () {
    $redis = new Swoole\Coroutine\Redis();
    $redis->connect('127.0.0.1', 6379);
    $val = $redis->get('key');
});

4.0.0或更高版本僅支持PHP7

4.0.1版本開始去除了--enable-coroutine編譯選項,改為動態(tài)配置

協(xié)程可以理解為純用戶態(tài)的線程,其通過協(xié)作而不是搶占來進行切換。相對于進程或者線程,協(xié)程所有的操作都可以在用戶態(tài)完成,創(chuàng)建和切換的消耗更低。

Swoole可以為每一個請求創(chuàng)建對應的協(xié)程,根據(jù)IO的狀態(tài)來合理的調(diào)度協(xié)程,這會帶來了以下優(yōu)勢:

開發(fā)者可以無感知的用同步的代碼編寫方式達到異步IO的效果和性能,避免了傳統(tǒng)異步回調(diào)所帶來的離散的代碼邏輯和陷入多層回調(diào)中導致代碼無法維護

同時由于底層封裝了協(xié)程,所以對比傳統(tǒng)的PHP層協(xié)程框架,開發(fā)者不需要使用yield關(guān)鍵詞來標識一個協(xié)程IO操作,所以不再需要對yield的語義進行深入理解以及對每一級的調(diào)用都修改為yield,這極大的提高了開發(fā)效率

可以滿足大部分開發(fā)者的需求。對于私有協(xié)議,開發(fā)者可以使用協(xié)程的TCP或者UDP接口去方便的封裝。

在Server程序中如果需要執(zhí)行很耗時的操作,比如一個聊天服務器發(fā)送廣播,Web服務器中發(fā)送郵件。如果直接去執(zhí)行這些函數(shù)就會阻塞當前進程,導致服務器響應變慢。

Swoole提供了異步任務處理的功能,可以投遞一個異步任務到TaskWorker進程池中執(zhí)行,不影響當前請求的處理速度。

程序代碼

基于第一個TCP服務器,只需要增加onTask和onFinish3個事件回調(diào)函數(shù)即可。另外需要設置task進程數(shù)量,可以根據(jù)任務的耗時和任務量配置適量的task進程。

$serv = new swoole_server("127.0.0.1", 9501);

//設置異步任務的工作進程數(shù)量
$serv->set(array('task_worker_num' => 4));

$serv->on('receive', function($serv, $fd, $from_id, $data) {
    //投遞異步任務
    $task_id = $serv->task($data);
    echo "Dispath AsyncTask: id=$task_id\n";
});

//處理異步任務
$serv->on('task', function ($serv, $task_id, $from_id, $data) {
    echo "New AsyncTask[id=$task_id]".PHP_EOL;
    //返回任務執(zhí)行的結(jié)果
    $serv->finish("$data -> OK");
});

//處理異步任務的結(jié)果
$serv->on('finish', function ($serv, $task_id, $data) {
    echo "AsyncTask[$task_id] Finish: $data".PHP_EOL;
});

$serv->start();

調(diào)用$serv->task()后,程序立即返回,繼續(xù)向下執(zhí)行代碼。onTask回調(diào)函數(shù)Task進程池內(nèi)被異步執(zhí)行。執(zhí)行完成后調(diào)用$serv->finish()返回結(jié)果。

感謝各位的閱讀!關(guān)于“swoole協(xié)程和異步區(qū)別是什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

文章題目:swoole協(xié)程和異步區(qū)別是什么-創(chuàng)新互聯(lián)
文章路徑:http://muchs.cn/article34/egepe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、定制開發(fā)、網(wǎng)站制作網(wǎng)站策劃、商城網(wǎng)站手機網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網(wǎng)站建設