우리는 이전에 PHP 멀티스레딩 및 비동기 호출의 구현 방법을 소개했습니다. 웹 서버를 통해 구현된 멀티스레딩은 멀티스레딩의 일부 효과만 모방할 수 있을 뿐이며 기존의 멀티스레딩은 아닙니다. 하지만 무슨 일이 있어도 우리의 요구 사항 중 일부를 충족할 수 있으므로 오늘은 PHP 다중 스레드 클래스를 구현하겠습니다!
php 다중 스레드 클래스:
/** * @title: PHP多线程类(Thread) * @version: 1.0 * * PHP多线程应用示例: * require_once 'thread.class.php'; * $thread = new thread(); * $thread->addthread('action_log','a'); * $thread->addthread('action_log','b'); * $thread->addthread('action_log','c'); * $thread->runthread(); * * function action_log($info) { * $log = 'log/' . microtime() . '.log'; * $txt = $info . "rnrn" . 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn"; * $fp = fopen($log, 'w'); * fwrite($fp, $txt); * fclose($fp); * } */ class thread { var $hooks = array(); var $args = array(); function thread() { } function addthread($func) { $args = array_slice(func_get_args(), 1); $this->hooks[] = $func; $this->args[] = $args; return true; } function runthread() { if(isset($_GET['flag'])) { $flag = intval($_GET['flag']); } if($flag || $flag === 0) { call_user_func_array($this->hooks[$flag], $this->args[$flag]); } else { for($i = 0, $size = count($this->hooks); $i < $size; $i++) { $fp=fsockopen($_SERVER['HTTP_HOST'],$_SERVER['SERVER_PORT']); if($fp) { $out = "GET {$_SERVER['PHP_SELF']}?flag=$i HTTP/1.1rn"; $out .= "Host: {$_SERVER['HTTP_HOST']}rn"; $out .= "Connection: Closernrn"; fputs($fp,$out); fclose($fp); } } } } }
Usage 메소드, 코드는 다음과 같습니다:
$thread = new thread(); $thread->addthread('func1','info1'); $thread->addthread('func2','info2'); $thread->addthread('func3','info3'); $thread->runthread();
지침:
addthread()는 스레드 함수를 추가하는 것입니다. 첫 번째 매개변수는 함수 이름이고 후속 매개변수는 매개변수(선택사항)가 전달됩니다.함수의 매개변수를 지정합니다.
runthread()는 실행 스레드의 함수입니다.
요약:
이 문서에서는 PHP 멀티 스레딩 클래스를 공유합니다. 앞으로는 그렇게 많이 작성할 필요가 없습니다. 다음에 필요할 때 코드를 직접 호출할 수 있으니 도움이 되길 바랍니다!
관련 권장사항:
위 내용은 PHP 멀티스레딩 클래스 구현 사례 연구의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!