ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# Coroutine::getuid 获取当前协程的唯一`ID` ``` function \Swoole\Coroutine::getuid() : int ``` > 仅在当前进程内唯一 返回值 ---- * 成功时返回当前协程`ID(int)` * 如果当前不在协程环境中,则返回`-1` ```php echo Swoole\Coroutine::getuid(); ``` cid分配机制 --- > [相关issue](https://github.com/swoole/swoole-src/issues/1977) cid map 使用了 bit map, 它在分配时总是会寻找下一个可用的比特位 我们可以通过以下代码来确认这个事实: ```php co::set([ 'max_coroutine' => PHP_INT_MAX, 'log_level' => SWOOLE_LOG_INFO, 'trace_flags' => 0 ]); $map = []; while (true) { if (empty($map)){ $cid = go(function () {co::sleep(5);}); }else{ $cid = go(function () { }); } if (!isset($map[$cid])) { $map[$cid] = $cid; } else { var_dump(end($map)); var_dump($cid); exit; } } ``` 它将会打印: ```php int(524288) int(2) ``` 所以我们有 `MAX_CORO_NUM_LIMIT => 0x80000` 则在同一时间同一进程的协程数也不能超过 `524288` 虽然它的分配数量存在上限, 但这个数值非常大, 一个进程不可能同时存在这么多协程, 除非你有一台超大内存的机器, 但那时候你也不必再担心这个问题