협력적 멀티태스킹을 달성하기 위해 코루틴을 사용하는 PHP에 대한 기사를 봤습니다. 그 기사에서는 PHP의 Yield를 통해 코루틴을 구현하는 방법에 대해 이야기했습니다. 그런데 글이 너무 길어서 다 읽지 못해 짧게 읽었습니다.
PHP의 코루틴은 프로젝트에서 언제 사용되나요?
아니면 적용 가능한 시나리오가 있나요?
현재 이를 캡슐화하는 라이브러리가 있나요?
PHP中文网2017-07-03 11:42:23
코루틴은 비동기 네트워크 IO에서 비차단으로 만드는 데 사용될 수 있습니다.
예를 들어 http 요청 중이고 외부 인터페이스를 요청해야 하는 경우 다음 시나리오가 발생합니다.
프런트 엔드 서버는 nginx입니다. nginx는 비차단 및 비동기식이지만 php-fpm은 동기식 및 차단입니다. 그런 다음 외부 인터페이스를 요청하면 이 작업이 차단됩니다. (여기에 추가하려면 php-fpm의 Worker 프로세스가 동기적으로 차단됩니다.)
코루틴을 사용한다고 가정하면 인터페이스를 요청할 때 작업이 일시 중지되고 컨텍스트가 저장될 수 있습니다. 그런 다음 인터페이스가 반환되면 작업을 다시 시작하고 실행을 계속합니다. 프로세스는 이 작업에 시간을 소비할 필요가 없으며 다른 http 요청을 처리할 수 있습니다. 이는 동시성의 양이 높다는 것을 의미합니까?
마찬가지로 요청이 데이터베이스를 쿼리하는 경우에도 IO 요청이며 동기적입니다. 코루틴은 IO 프로그래밍을 비동기식 및 비차단 방식으로 만들어 동시성을 높일 수 있습니다. 이를 통해 주로 CPU는 IO를 기다리는 동안 다른 작업을 처리할 수 있습니다. 모든 IO 요청은 코루틴을 통해 이를 수행할 수 있습니다.
귀하의 글을 읽었는데, 정말 좋은 글입니다. 여기에서 저자는 위에서 언급한 작업을 수행하기 위한 작업 일정을 구현하기 위해 Yield를 사용합니다. 또한 Niao 형제가 번역한 http://www.laruence.com/2015/... 에서도 보실 수 있는데, 이는 여러분이 본 번역에 대한 보충 자료라고 할 수 있습니다. 그는 물론 단지 데모일 뿐인 Yield를 통해 비동기 비차단 서버를 구현했습니다. 예를 들면 더 좋아 보일 것입니다.
仅有的幸福2017-07-03 11:42:23
지금까지 제가 접한 것은 laravel 프레임워크 모델이 커서를 사용하여 데이터를 가져올 때 한 번에 너무 많은 데이터를 가져와서 발생하는 메모리 부족 문제를 방지하기 위해 Yield를 사용한다는 것입니다
某草草2017-07-03 11:42:23
가장 기본적인 것은 대량의 데이터를 엑셀로 가져오거나 내보내는 것인데, 내보내기/내보내기 과정에서 데이터를 처리해야 한다는 가정하에 이때 활용하면 됩니다.