swoole では sleep 関数を使用するとプロセスがスリープブロックに陥るため、スリーププロセスを中断できるのはシグナルのみです swoole のシグナルは signalfd をベースとしているため、シグナルを送信してもスリープを中断することはできませんオペレーティング システムは、指定された時刻まで現在のプロセスを再起動しません。
このチュートリアルの動作環境: Windows 10 システム、Swoole 4 バージョン、DELL G3 コンピューター
In 非同期 IO プログラムでは、sleep/usleep/time_sleep_until/time_nanosleep を使用してはなりません。 (スリープは、すべてのスリープ関数を指すために以下で使用されます)
スリープ関数により、プロセスはスリープ ブロッキングに陥ります。指定された時間が経過すると、オペレーティング システムが起動されます。そのときのみ、現在のプロセスが再起動されます。
スリープ プロセス中は、シグナルのみが中断できます。
Swoole の信号処理は signalfd に基づいて実装されているため、シグナルが送信されてもスリープを中断することはできません。
Swoole が提供する swoole_event_add、swoole_timer_tick、swoole_timer_after、swoole_process::signal、および非同期 swoole_clientプロセスがスリープすると動作を停止します。 swoole_server は新しいリクエストを処理できなくなりました。
$serv = new swoole_server("127.0.0.1", 9501); $serv->set(['worker_num' => 1]); $serv->on('receive', function ($serv, $fd, $from_id, $data) { sleep(100); $serv->send($fd, 'Swoole: '.$data); }); $serv->start();
スリープ関数が onReceive イベントで実行され、サーバーは 100 秒以内にそれ以上クライアント リクエストを受信できなくなります。 推奨学習:
swoole チュートリアル以上がなぜswooleは睡眠を使用できないのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。