Swoole中如果在父进程内调用了mt_rand,不同的子进程内再调用mt_rand返回的结果会是相同的。所以必须在每个子进程内调用mt_srand重新播种。

    shufflearray_rand等依赖随机数的PHP函数同样会受到影响
    1. mt_rand(0, 1);
    2. //开始
    3. $worker_num = 16;
    4. // fork 进程
    5. for($i = 0; $i < $worker_num; $i++) {
    6. $process = new swoole_process('child_async', false, 2);
    7. $pid = $process -> start();
    8. }
    9. //异步执行进程
    10. function child_async(swoole_process $worker) {
    11. mt_srand();
    12. echo mt_rand(0, 100).PHP_EOL;
    13. $worker->exit();
    14. }

    原文:https://wiki.swoole.com/wiki/page/732.html