PHP에서 멀티스레딩 모델을 구현하는 것이 가능한지, 실제로 구현할지는 아니면 그냥 시뮬레이션해 보세요. 이전에는 운영 체제가 PHP 실행 파일의 다른 인스턴스를 로드하고 다른 동시 프로세스를 처리하도록 강제하는 것이 제안되었습니다.
이 문제는 PHP 코드가 실행을 완료한 후에도 PHP 인스턴스가 PHP에서 종료될 수 없기 때문에 여전히 메모리에 남아 있다는 것입니다. 따라서 여러 스레드를 시뮬레이션하면 어떤 일이 일어날지 상상할 수 있습니다. 그래서 저는 여전히 PHP에서 멀티스레딩을 효율적으로 수행하거나 시뮬레이션할 수 있는 방법을 찾고 있습니다. 어떤 아이디어가 있나요?
예, PHP에서는 멀티스레딩에 pthread를 사용할 수 있습니다.
PHP 문서에 따르면:
pthreads는 PHP의 멀티스레딩에 필요한 모든 도구를 제공하는 객체 지향 API입니다. PHP 애플리케이션은 스레드, 작업자 스레드 및 스레드 개체를 생성, 읽기, 쓰기, 실행 및 동기화할 수 있습니다.
경고:
pthreads 확장은 웹 서버 환경에서 사용할 수 없습니다. 따라서 PHP의 멀티스레딩은 CLI 기반 애플리케이션으로 제한되어야 합니다.
#!/usr/bin/php <?php class AsyncOperation extends Thread { public function __construct($arg) { $this->arg = $arg; } public function run() { if ($this->arg) { $sleep = mt_rand(1, 10); printf('%s: %s -start -sleeps %d' . "\n", date("g:i:sa"), $this->arg, $sleep); sleep($sleep); printf('%s: %s -finish' . "\n", date("g:i:sa"), $this->arg); } } } // 创建一个数组 $stack = array(); // 启动多线程 foreach ( range("A", "D") as $i ) { $stack[] = new AsyncOperation($i); } // 启动所有线程 foreach ( $stack as $t ) { $t->start(); } ?>
error_reporting(E_ALL); class AsyncWebRequest extends Thread { public $url; public $data; public function __construct($url) { $this->url = $url; } public function run() { if (($url = $this->url)) { /* * 如果请求大量数据,你可能想要使用 fsockopen 和 read,并在读取之间使用 usleep */ $this->data = file_get_contents($url); } else printf("Thread #%lu was not provided a URL\n", $this->getThreadId()); } } $t = microtime(true); $g = new AsyncWebRequest(sprintf("http://www.google.com/?q=%s", rand() * 10)); /* 开始同步 */ if ($g->start()) { printf("Request took %f seconds to start ", microtime(true) - $t); while ( $g->isRunning() ) { echo "."; usleep(100); } if ($g->join()) { printf(" and %f seconds to finish receiving %d bytes\n", microtime(true) - $t, strlen($g->data)); } else printf(" and %f seconds to finish, request failed\n", microtime(true) - $t); }
위 내용은 PHP에서 멀티스레딩을 어떻게 구현할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!