順序執行耗時
= 所有任務執行耗時的總和:t1+t2+t3...
併發執行耗時
= 所有任務執行耗時的最大值:max(t1, t2, t3, ...)
按照test1.php
正常執行**, 若for
裡每個呼叫都需要耗時2s
, 那執行5次下來就需要10s
test2.php
和test3.php
用swoole
提供的併發呼叫功能, 利用協程(go)
+通道(channel)
特性,非同步
併發執行, 所需時間為2s
, 大大提高了效率
官方文件waitgroup:
go + channel:
**:
# test1.php
$result=[
];for($i=
0;$i<5;
$i++
)var_dump
(json_encode
($result))
;# test2.php
// waitgroup
co\run
(function()
);}//掛起當前協程,等待所有任務完成後恢復
$wg-
>
wait()
;var_dump
(json_encode
($result))
;});
# test3.php
// 協程(go) + 通道(channel)
co\run
(function()
);}for($i
=0;$i
<$n;
$i++
)var_dump
(json_encode
($result))
;});
耗時參考:
# time php test1.php
string(11)
"[0,1,2,3,4]"
real 0m10.024s
user 0m0.004s
sys 0m0.016s
# time php test2.php
string(11)
"[0,4,3,2,1]"
real 0m2.035s
user 0m0.013s
sys 0m0.017s
# time php test3.php
string(11)
"[0,4,3,2,1]"
real 0m2.031s
user 0m0.019s
sys 0m0.008s
golang 併發實踐
golang 高併發主要是依靠sync包下的api實現,首先就是waitgroup 先說說waitgroup的用途 它能夠一直等到所有的goroutine執行完成,並且阻塞主線程的執行,直到所有的goroutine執行完成。waitgroup總共有三個方法 add delta int done wa...
php的春天,swoole處理高併發
swoole介紹swoole是php的乙個擴充套件。簡單理解 swoole 非同步i o 網路通訊 phper可以基於swoole去實現過去php無法實現的功能。swoole如何處理高併發 reactor模型介紹 io復用非同步非阻塞程式使用經典的reactor模型,reactor顧名思義就是反應堆...
Go併發程式設計實踐
併發程式設計一直是golang區別與其他語言的很大優勢,也是實際工作場景中經常遇到的。近日筆者在組內分享了我們常見的併發場景,及 示例,以期望大家能在遇到相同場景下,能快速的想到解決方案,或者是拿這些方案與自己實現的比較,取長補短。現整理出來與大家共享。回到頂部 很多時候,我們只想併發的做一件事情,...