You've already forked qlg.tsgz.moe
Init Repo
This commit is contained in:
33
vendor/swoole/examples/coroutine/select/1.php
vendored
Executable file
33
vendor/swoole/examples/coroutine/select/1.php
vendored
Executable file
@ -0,0 +1,33 @@
|
||||
<?php
|
||||
$c1 = new chan();
|
||||
//consumer first with select mode
|
||||
$num = 10;
|
||||
go(function () use ($c1,$num) {
|
||||
$read_list = [$c1];
|
||||
$write_list = null;
|
||||
echo "select yield\n";
|
||||
$result = chan::select($read_list, $write_list, 2);
|
||||
echo "select resume res: ".var_export($result,1)."\n";
|
||||
if ($read_list)
|
||||
{
|
||||
foreach($read_list as $ch)
|
||||
{
|
||||
for ($i=0;$i<$num;$i++)
|
||||
{
|
||||
$ret = $ch->pop();
|
||||
echo "pop [#$i] ret:".var_export($ret,1)."\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
go(function () use ($c1,$num) {
|
||||
echo "push start\n";
|
||||
for ($i=0;$i<$num;$i++)
|
||||
{
|
||||
$ret = $c1->push("data-$i");
|
||||
echo "push [#$i] ret:".var_export($ret,1)."\n";
|
||||
}
|
||||
|
||||
});
|
||||
echo "main end\n";
|
23
vendor/swoole/examples/coroutine/select/2.php
vendored
Executable file
23
vendor/swoole/examples/coroutine/select/2.php
vendored
Executable file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
$c1 = new chan();
|
||||
//consumer first without select mode
|
||||
$num = 10;
|
||||
go(function () use ($c1, $num) {
|
||||
echo "pop start\n";
|
||||
for ($i=0;$i<$num;$i++)
|
||||
{
|
||||
$ret = $c1->pop();
|
||||
echo "pop [#$i] ret:".var_export($ret,1)."\n";
|
||||
}
|
||||
});
|
||||
|
||||
go(function () use ($c1,$num) {
|
||||
echo "push start\n";
|
||||
for ($i=0;$i<$num;$i++)
|
||||
{
|
||||
$ret = $c1->push("data-$i");
|
||||
echo "push [#$i] ret:".var_export($ret,1)."\n";
|
||||
}
|
||||
|
||||
});
|
||||
echo "main end\n";
|
32
vendor/swoole/examples/coroutine/select/3.php
vendored
Executable file
32
vendor/swoole/examples/coroutine/select/3.php
vendored
Executable file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
$c1 = new chan(1);
|
||||
//product first with select mode
|
||||
$num = 10;
|
||||
go(function () use ($c1,$num) {
|
||||
echo "push start\n";
|
||||
for ($i=0;$i<$num;$i++)
|
||||
{
|
||||
$ret = $c1->push("data-$i");
|
||||
echo "push [#$i] ret:".var_export($ret,1)."\n";
|
||||
}
|
||||
});
|
||||
|
||||
go(function () use ($c1,$num) {
|
||||
$read_list = [$c1];
|
||||
$write_list = null;
|
||||
echo "select yield\n";
|
||||
$result = chan::select($read_list, $write_list, 2);
|
||||
echo "select resume res: ".var_export($result,1)."\n";
|
||||
if ($read_list)
|
||||
{
|
||||
foreach($read_list as $ch)
|
||||
{
|
||||
for ($i=0;$i<$num;$i++)
|
||||
{
|
||||
$ret = $ch->pop();
|
||||
echo "pop [#$i] ret:".var_export($ret,1)."\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
echo "main end\n";
|
23
vendor/swoole/examples/coroutine/select/4.php
vendored
Executable file
23
vendor/swoole/examples/coroutine/select/4.php
vendored
Executable file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
$c1 = new chan(2);
|
||||
//product first without select mode
|
||||
$num = 10;
|
||||
go(function () use ($c1,$num) {
|
||||
echo "push start\n";
|
||||
for ($i=0;$i<$num;$i++)
|
||||
{
|
||||
$ret = $c1->push("data-$i");
|
||||
echo "push [#$i] ret:".var_export($ret,1)."\n";
|
||||
}
|
||||
});
|
||||
|
||||
go(function () use ($c1, $num) {
|
||||
echo "pop start\n";
|
||||
for ($i=0;$i<$num;$i++)
|
||||
{
|
||||
$ret = $c1->pop();
|
||||
echo "pop [#$i] ret:".var_export($ret,1)."\n";
|
||||
}
|
||||
});
|
||||
echo "main end\n";
|
||||
|
37
vendor/swoole/examples/coroutine/select/5.php
vendored
Executable file
37
vendor/swoole/examples/coroutine/select/5.php
vendored
Executable file
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
$c1 = new chan();
|
||||
$c2 = new chan();
|
||||
function fibonacci($c1, $c2)
|
||||
{
|
||||
go(function () use ($c1, $c2) {
|
||||
$a = 0;
|
||||
$b = 1;
|
||||
while(1) {
|
||||
$read_list = [$c2];
|
||||
$write_list = [$c1];
|
||||
$result = chan::select($read_list, $write_list, 2);
|
||||
if ($write_list) {
|
||||
$t = $a + $b;
|
||||
$a = $b;
|
||||
$b = $t;
|
||||
$write_list[0]->push($a);
|
||||
}
|
||||
if ($read_list) {
|
||||
$ret = $read_list[0]->pop();
|
||||
if ($ret === 1) {
|
||||
echo "quit\n";
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
$num = 10;
|
||||
go(function () use ($c1, $c2, $num) {
|
||||
for ($i = 0; $i < $num; $i ++) {
|
||||
$ret = $c1->pop();
|
||||
echo "fibonacci @$i $ret\n";
|
||||
}
|
||||
$c2->push(1);
|
||||
});
|
||||
fibonacci($c1, $c2);
|
38
vendor/swoole/examples/coroutine/select/6.php
vendored
Executable file
38
vendor/swoole/examples/coroutine/select/6.php
vendored
Executable file
@ -0,0 +1,38 @@
|
||||
<?php
|
||||
$c1 = new chan();
|
||||
|
||||
$num = 10;
|
||||
go(function () use ($c1,$num) {
|
||||
$read_list = [$c1];
|
||||
$write_list = null;
|
||||
echo "select yield\n";
|
||||
$result = chan::select($read_list, $write_list, 2);
|
||||
echo "select resume res: ".var_export($result,1)."\n";
|
||||
if ($read_list)
|
||||
{
|
||||
foreach($read_list as $ch)
|
||||
{
|
||||
for ($i=0;$i<$num;$i++)
|
||||
{
|
||||
$ret = $ch->pop();
|
||||
echo "pop [#$i] ret:".var_export($ret,1)."\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
go(function () use ($c1,$num) {
|
||||
echo "push start\n";
|
||||
for ($i=0;$i<$num;$i++)
|
||||
{
|
||||
if ($i == 2) {
|
||||
echo "start sleep\n";
|
||||
co:sleep(1);
|
||||
echo "end sleep\n";
|
||||
}
|
||||
$ret = $c1->push("data-$i");
|
||||
echo "push [#$i] ret:".var_export($ret,1)."\n";
|
||||
}
|
||||
|
||||
});
|
||||
echo "main end\n";
|
54
vendor/swoole/examples/coroutine/select/7.php
vendored
Executable file
54
vendor/swoole/examples/coroutine/select/7.php
vendored
Executable file
@ -0,0 +1,54 @@
|
||||
<?php
|
||||
//chan1 block and chan buffer
|
||||
$c1 = new chan();
|
||||
$c2 = new chan(10);
|
||||
$num = 10;
|
||||
go(function () use ($c2,$num) {
|
||||
for ($i=0;$i<$num;$i++)
|
||||
{
|
||||
$ret = $c2->push("chan2-$i");
|
||||
echo "chan 2 push [#$i] ret:".var_export($ret,1)."\n";
|
||||
}
|
||||
});
|
||||
go(function () use ($c1,$num) {
|
||||
$read_list = [$c1];
|
||||
$write_list = null;
|
||||
$result = chan::select($read_list, $write_list, 2);
|
||||
echo "select resume res: ".var_export($result,1)."\n";
|
||||
if ($read_list)
|
||||
{
|
||||
foreach($read_list as $ch)
|
||||
{
|
||||
for ($i=0;$i<$num;$i++)
|
||||
{
|
||||
$ret = $ch->pop();
|
||||
echo "chan1 pop [#$i] ret:".var_export($ret,1)."\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
go(function () use ($c1,$num) {
|
||||
echo "chan1 push start\n";
|
||||
for ($i=0;$i<$num;$i++)
|
||||
{
|
||||
if ($i == 2) {
|
||||
echo "start sleep\n";
|
||||
co:sleep(1);
|
||||
echo "end sleep\n";
|
||||
}
|
||||
$ret = $c1->push("chan1-$i");
|
||||
echo "chan1 push [#$i] ret:".var_export($ret,1)."\n";
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
go(function () use ($c2,$num) {
|
||||
echo "chan2 pop start\n";
|
||||
for ($i=0;$i<$num;$i++)
|
||||
{
|
||||
$ret = $c2->pop();
|
||||
echo "chan2 pop [#$i] ret:".var_export($ret,1)."\n";
|
||||
}
|
||||
});
|
||||
echo "main end\n";
|
48
vendor/swoole/examples/coroutine/select/8.php
vendored
Executable file
48
vendor/swoole/examples/coroutine/select/8.php
vendored
Executable file
@ -0,0 +1,48 @@
|
||||
<?php
|
||||
//chan1 block and chan buffer
|
||||
$c1 = new chan();
|
||||
$c2 = new chan(10);
|
||||
$num = 10;
|
||||
go(function () use ($c2,$num) {
|
||||
for ($i=0;$i<$num;$i++)
|
||||
{
|
||||
$ret = $c2->push("chan2-$i");
|
||||
echo "chan 2 push [#$i] ret:".var_export($ret,1)."\n";
|
||||
}
|
||||
});
|
||||
|
||||
go(function () use ($c1,$c2,$num) {
|
||||
$ori_list = $read_list = [$c1,$c2];
|
||||
$write_list = null;
|
||||
$result = chan::select($read_list, $write_list, 2);
|
||||
echo "select resume res: ".var_export($result,1)."\n";
|
||||
|
||||
if ($ori_list)
|
||||
{
|
||||
foreach ($ori_list as $chan => $ch)
|
||||
{
|
||||
for ($i=0;$i<$num;$i++)
|
||||
{
|
||||
$ret = $ch->pop();
|
||||
$chan_id = $chan + 1;
|
||||
echo "chan{$chan_id} pop [#$i] ret:".var_export($ret,1)."\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
go(function () use ($c1,$num) {
|
||||
echo "chan1 push start\n";
|
||||
for ($i=0;$i<$num;$i++)
|
||||
{
|
||||
if ($i == 2) {
|
||||
echo "start sleep\n";
|
||||
co:sleep(1);
|
||||
echo "end sleep\n";
|
||||
}
|
||||
$ret = $c1->push("chan1-$i");
|
||||
echo "chan1 push [#$i] ret:".var_export($ret,1)."\n";
|
||||
}
|
||||
|
||||
});
|
||||
echo "main end\n";
|
Reference in New Issue
Block a user