這篇文章給大家分享的是有關(guān)swoole協(xié)程和異步區(qū)別是什么的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
成都創(chuàng)新互聯(lián)公司,為您提供網(wǎng)站建設(shè)公司、重慶網(wǎng)站制作、網(wǎng)站營(yíng)銷(xiāo)推廣、網(wǎng)站開(kāi)發(fā)設(shè)計(jì),對(duì)服務(wù)人造霧等多個(gè)行業(yè)擁有豐富的網(wǎng)站建設(shè)及推廣經(jīng)驗(yàn)。成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司成立于2013年,提供專(zhuān)業(yè)網(wǎng)站制作報(bào)價(jià)服務(wù),我們深知市場(chǎng)的競(jìng)爭(zhēng)激烈,認(rèn)真對(duì)待每位客戶(hù),為客戶(hù)提供賞心悅目的作品。 與客戶(hù)共同發(fā)展進(jìn)步,是我們永遠(yuǎn)的責(zé)任!從4.0版本開(kāi)始Swoole提供了完整的協(xié)程(Coroutine)+ 通道(Channel)特性,帶來(lái)全新的CSP編程模型。
應(yīng)用層可使用完全同步的編程方式,底層自動(dòng)實(shí)現(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版本開(kāi)始去除了--enable-coroutine編譯選項(xiàng),改為動(dòng)態(tài)配置
協(xié)程可以理解為純用戶(hù)態(tài)的線(xiàn)程,其通過(guò)協(xié)作而不是搶占來(lái)進(jìn)行切換。相對(duì)于進(jìn)程或者線(xiàn)程,協(xié)程所有的操作都可以在用戶(hù)態(tài)完成,創(chuàng)建和切換的消耗更低。
Swoole可以為每一個(gè)請(qǐng)求創(chuàng)建對(duì)應(yīng)的協(xié)程,根據(jù)IO的狀態(tài)來(lái)合理的調(diào)度協(xié)程,這會(huì)帶來(lái)了以下優(yōu)勢(shì):
開(kāi)發(fā)者可以無(wú)感知的用同步的代碼編寫(xiě)方式達(dá)到異步IO的效果和性能,避免了傳統(tǒng)異步回調(diào)所帶來(lái)的離散的代碼邏輯和陷入多層回調(diào)中導(dǎo)致代碼無(wú)法維護(hù)
同時(shí)由于底層封裝了協(xié)程,所以對(duì)比傳統(tǒng)的PHP層協(xié)程框架,開(kāi)發(fā)者不需要使用yield關(guān)鍵詞來(lái)標(biāo)識(shí)一個(gè)協(xié)程IO操作,所以不再需要對(duì)yield的語(yǔ)義進(jìn)行深入理解以及對(duì)每一級(jí)的調(diào)用都修改為yield,這極大的提高了開(kāi)發(fā)效率
可以滿(mǎn)足大部分開(kāi)發(fā)者的需求。對(duì)于私有協(xié)議,開(kāi)發(fā)者可以使用協(xié)程的TCP或者UDP接口去方便的封裝。
在Server程序中如果需要執(zhí)行很耗時(shí)的操作,比如一個(gè)聊天服務(wù)器發(fā)送廣播,Web服務(wù)器中發(fā)送郵件。如果直接去執(zhí)行這些函數(shù)就會(huì)阻塞當(dāng)前進(jìn)程,導(dǎo)致服務(wù)器響應(yīng)變慢。
Swoole提供了異步任務(wù)處理的功能,可以投遞一個(gè)異步任務(wù)到TaskWorker進(jìn)程池中執(zhí)行,不影響當(dāng)前請(qǐng)求的處理速度。
程序代碼
基于第一個(gè)TCP服務(wù)器,只需要增加onTask和onFinish3個(gè)事件回調(diào)函數(shù)即可。另外需要設(shè)置task進(jìn)程數(shù)量,可以根據(jù)任務(wù)的耗時(shí)和任務(wù)量配置適量的task進(jìn)程。
$serv = new swoole_server("127.0.0.1", 9501); //設(shè)置異步任務(wù)的工作進(jìn)程數(shù)量 $serv->set(array('task_worker_num' => 4)); $serv->on('receive', function($serv, $fd, $from_id, $data) { //投遞異步任務(wù) $task_id = $serv->task($data); echo "Dispath AsyncTask: id=$task_id\n"; }); //處理異步任務(wù) $serv->on('task', function ($serv, $task_id, $from_id, $data) { echo "New AsyncTask[id=$task_id]".PHP_EOL; //返回任務(wù)執(zhí)行的結(jié)果 $serv->finish("$data -> OK"); }); //處理異步任務(wù)的結(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進(jìn)程池內(nèi)被異步執(zhí)行。執(zhí)行完成后調(diào)用$serv->finish()返回結(jié)果。
感謝各位的閱讀!關(guān)于“swoole協(xié)程和異步區(qū)別是什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
文章題目:swoole協(xié)程和異步區(qū)別是什么-創(chuàng)新互聯(lián)
文章路徑:http://jinyejixie.com/article34/egepe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、定制開(kāi)發(fā)、網(wǎng)站制作、網(wǎng)站策劃、商城網(wǎng)站、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容