跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 关于 swoole 的协程和 channel 使用遇到的问题
未分類
30 12 月 2020

关于 swoole 的协程和 channel 使用遇到的问题

关于 swoole 的协程和 channel 使用遇到的问题

資深大佬 : yuandj 2

$qpsChannel = new Channel();  go(function () use ($qpsChannel, $configs) {  $waitGroup = new WaitGroup();   foreach ($configs as $key => $config) {   $waitGroup->add();   go(function () use ($qpsChannel, $waitGroup, $key, $config) {    if ($this->skipConfigByStatus($config) === false    && $this->skipConfigByQps($config) === false) {     $qpsChannel->push('111111');    } else {     $qpsChannel->push('222222');    }               $waitGroup->done();   });  }   $waitGroup->wait();  $qpsChannel->close(); });  while (true) {  $qpsStatusArr = $qpsChannel->pop();  var_dump($qpsStatusArr);  if ($qpsStatusArr === false) break; } 

上面代码逻辑是打开一个子协程去循环判断一些逻辑,并把结果写入到 channel 中,处理完之后,从子协程把 channle 关闭(关闭之后再操作 channel 就会返回 false)

正常的逻辑应该是打开子协程去处理逻辑,然后进入到 while 去读取 channle,当子协程有 channel push 时,while 中的逻辑会把结果打印出来

现在遇到的问题是只打印出一个 false,就结束了。难道是子协程处理时间太快了,还没走到 while,channle 就被 close 了?

问题 1:求大神解答上面代码问题。

问题 2:大家都是怎么在代码中用子协程去节省时间呢?写法是什么样的呢?

大佬有話說 (3)

  • 資深大佬 : mxtob

    wg
    chan
    for 10
    go
    i <-chan pop
    push i
    wg done

    for data i
    chan push i
    wg add

    wg done
    chan close

    这样行吗

  • 資深大佬 : mxtob

    倒数第二句是 wg wait

  • 主 資深大佬 : yuandj

    @mxtob 把读写颠倒一下,是个不错的想法。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具