7.php 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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,$num) {
  14. $read_list = [$c1];
  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 ($read_list)
  19. {
  20. foreach($read_list as $ch)
  21. {
  22. for ($i=0;$i<$num;$i++)
  23. {
  24. $ret = $ch->pop();
  25. echo "chan1 pop [#$i] ret:".var_export($ret,1)."\n";
  26. }
  27. }
  28. }
  29. });
  30. go(function () use ($c1,$num) {
  31. echo "chan1 push start\n";
  32. for ($i=0;$i<$num;$i++)
  33. {
  34. if ($i == 2) {
  35. echo "start sleep\n";
  36. co:sleep(1);
  37. echo "end sleep\n";
  38. }
  39. $ret = $c1->push("chan1-$i");
  40. echo "chan1 push [#$i] ret:".var_export($ret,1)."\n";
  41. }
  42. });
  43. go(function () use ($c2,$num) {
  44. echo "chan2 pop start\n";
  45. for ($i=0;$i<$num;$i++)
  46. {
  47. $ret = $c2->pop();
  48. echo "chan2 pop [#$i] ret:".var_export($ret,1)."\n";
  49. }
  50. });
  51. echo "main end\n";