8.php 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <?php
  2. //chan1 block and chan buffer
  3. $c1 = new chan();
  4. $c2 = new chan(10);
  5. $num = 10;
  6. go(function () use ($c2,$num) {
  7. for ($i=0;$i<$num;$i++)
  8. {
  9. $ret = $c2->push("chan2-$i");
  10. echo "chan 2 push [#$i] ret:".var_export($ret,1)."\n";
  11. }
  12. });
  13. go(function () use ($c1,$c2,$num) {
  14. $ori_list = $read_list = [$c1,$c2];
  15. $write_list = null;
  16. $result = chan::select($read_list, $write_list, 2);
  17. echo "select resume res: ".var_export($result,1)."\n";
  18. if ($ori_list)
  19. {
  20. foreach ($ori_list as $chan => $ch)
  21. {
  22. for ($i=0;$i<$num;$i++)
  23. {
  24. $ret = $ch->pop();
  25. $chan_id = $chan + 1;
  26. echo "chan{$chan_id} pop [#$i] ret:".var_export($ret,1)."\n";
  27. }
  28. }
  29. }
  30. });
  31. go(function () use ($c1,$num) {
  32. echo "chan1 push start\n";
  33. for ($i=0;$i<$num;$i++)
  34. {
  35. if ($i == 2) {
  36. echo "start sleep\n";
  37. co:sleep(1);
  38. echo "end sleep\n";
  39. }
  40. $ret = $c1->push("chan1-$i");
  41. echo "chan1 push [#$i] ret:".var_export($ret,1)."\n";
  42. }
  43. });
  44. echo "main end\n";