win7环境下,wampserver支持php pthreads pool类和worker对象。win10却不支持pool类的$this->worker->getConnection()连接数据库,网页直接报错,子进程自动重启,apache日志报错:Parent: child process 9256 exited with status 3221225477 -- Restarting
以下程序可以测试win10是否解决问题:
<?php
class WebWorker extends Worker {
public function __construct(SafeLog $logger) {
$this->logger = $logger;
}
protected $loger;
}
class WebWork extends Stackable {
public function isComplete() {
return $this->complete;
}
public function run() {
$this->worker
->logger
->log("%s executing in Thread #%lu",
__CLASS__, $this->worker->getThreadId());
$this->complete = true;
}
protected $complete;
}
class SafeLog extends Stackable {
protected function log($message, $args = []) {
$args = func_get_args();
if (($message = array_shift($args))) {
echo vsprintf(
"{$message}\n", $args);
}
}
}
$pool = new Pool(8, \WebWorker::class, [new SafeLog()]);
$pool->submit($w=new WebWork());
$pool->submit(new WebWork());
$pool->submit(new WebWork());
$pool->submit(new WebWork());
$pool->submit(new WebWork());
$pool->submit(new WebWork());
$pool->submit(new WebWork());
$pool->submit(new WebWork());
$pool->submit(new WebWork());
$pool->submit(new WebWork());
$pool->submit(new WebWork());
$pool->submit(new WebWork());
$pool->submit(new WebWork());
$pool->submit(new WebWork());
$pool->shutdown();
$pool->collect(function($work){
return $work->isComplete();
});
?>
win7系统正常运行结果:
WebWork executing in Thread #1708
WebWork executing in Thread #1708
WebWork executing in Thread #5996
WebWork executing in Thread #5996
WebWork executing in Thread #6012
WebWork executing in Thread #6012
WebWork executing in Thread #6016
WebWork executing in Thread #6016
WebWork executing in Thread #2524
WebWork executing in Thread #2524
WebWork executing in Thread #5312
WebWork executing in Thread #5312
WebWork executing in Thread #6000
WebWork executing in Thread #5688