array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'zh', ), 'this' => array ( 0 => 'pool.submitTo.php', 1 => 'Pool::submitTo', ), 'up' => array ( 0 => 'class.pool.php', 1 => 'Pool', ), 'prev' => array ( 0 => 'pool.submit.php', 1 => 'Pool::submit', ), 'next' => array ( 0 => 'class.volatile.php', 1 => 'Volatile', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'zh', 'path' => 'reference/pthreads/pool/submitTo.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PECL pthreads >= 2.0.0)
Pool::submitTo — 提交一个任务到特定的 Worker 以执行
将对象提交到 Pool 中某个特定的 Worker 对象来执行。Worker 的下标从 0 开始, 由于 Pool 中的线程是懒加载机制, 所以 Worker 对象仅在 Pool 需要执行任务的时候才会真正被创建。
worker
用来执行任务的 Worker 对象,下标从 0
开始。
task
要执行的任务
接受新加入对象的 Worker 对象ID
示例 #1 提交任务到特定的 Worker
<?php
class Task extends Threaded {
public function run() {
var_dump(Thread::getCurrentThreadID());
}
}
$pool = new Pool(2);
$pool->submit(new Task());
for ($i = 0; $i < 5; ++$i) {
$pool->submitTo(0, new Task()); // 将所有的任务都入栈到下标为 0 的 Worker
}
$pool->submitTo(1, new Task()); // 由于第二个 Worker 尚未存在,所以不可以将任务入栈到第二个 Worker
$pool->shutdown();
以上示例会输出:
int(4475011072) int(4475011072) int(4475011072) int(4475011072) int(4475011072) int(4475011072) Fatal error: Uncaught Exception: The selected worker (1) does not exist in %s:%d