Swoole4는 PHP 언어에 대한 강력한 CSP 코루틴 프로그래밍 모드를 제공합니다. 사용자는 다음과 같이 go 함수를 통해 코루틴을 생성하여 동시 실행 효과를 얻을 수 있습니다. 다음 코드 표시:
<?php //Co::sleep()是Swoole提供的API,并不会阻塞当前进程,只会阻塞协程触发协程切换。 go(function (){ Co::sleep(1); echo "a"; }); go(function (){ Co::sleep(2); echo "b"; }); echo "c"; //输出结果:cab //程序总执行时间2秒
사실 다중 코루틴 프로그래밍 모드는 Swoole4 이전에 구현되었습니다. 코루틴이 생성되고 전환되고 종료되면 해당 PHP 스택이 작동될 수 있습니다(생성, 전환 및 재활용). PHP 스택).
현재 코루틴 구현에서는 PHP 구문을 완벽하게 지원할 수 없습니다. 근본적인 이유는 C 스택 정보가 저장되지 않기 때문입니다. (vm 내부 또는 일부 확장에서 제공하는 API는 c 함수를 통해 구현됩니다. 이러한 함수를 호출할 때 코루틴 전환이 발생하면 c 스택은 이를 어떻게 처리해야 할까요?)
Swoole4 added 관리 c 스택의 생성에는 코루틴이 생성, 전환 및 종료될 때 c 스택의 생성, 전환 및 재활용이 수반됩니다.
Swoole4 코루틴 구현 계획은 다음과 같습니다. #
·
API 레이어는 코루틴을 생성하기 위한 go() 함수와 같이 사용자에게 제공되는 코루틴 관련 함수입니다. ()는 현재 코루틴이 CPU를 포기하도록 합니다. Co::resume()은 코루틴의 실행을 재개할 수 있습니다. Swoole4 코루틴은 c 스택을 관리하는 데 동시에 사용됩니다. , PHPCoroutine은 PHP 스택을 관리하는 데 사용됩니다. 그 중 Coroutine(), Yield() 및 이력서()는 C 스택의 생성 및 스왑 인 및 스왑 아웃을 구현합니다. on_resume()은 PHP 스택 내부 및 외부에서 생성 및 교체를 구현합니다. c 스택을 관리할 때 make_fcontext() 및 jump_fcontext() 함수는 모두 어셈블리 언어로 작성되어 생성 및 제거를 구현합니다. C 스택 컨텍스트 전환#🎜 🎜#·Swoole4는 단순히 Boost.context, 즉 컨텍스트 레이어인 Context()를 캡슐화합니다. SwapIn() 및 SwapOut()은 c 스택 생성과 Swap in 및 swap out에 해당합니다.
PHP 중국어 웹사이트에는 무료 Swoole 입문 튜토리얼이 많이 있습니다. 누구나 배울 수 있습니다!
위 내용은 Swoole 코루틴을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!