Skip to content

Instantly share code, notes, and snippets.

@jmikola
Created October 15, 2014 20:19
Show Gist options
  • Save jmikola/49d32593c215165bb197 to your computer and use it in GitHub Desktop.
Save jmikola/49d32593c215165bb197 to your computer and use it in GitHub Desktop.
mongo and pthreads extensions
$ php threads.php
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
b: getmore
a: getmore
b: getmore
a: getmore
b: getmore
a: getmore
a: getmore
b: getmore
a: getmore
b: getmore
a: getmore
b: getmore
a: getmore
a: getmore
b: getmore
a: getmore
b: getmore
a: getmore
b: getmore
a: getmore
b: getmore
a: getmore
b: closing MongoClient and returning
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
a: getmore
<?php
$mc = new MongoClient();
$collection = $mc->test->foo;
$collection->drop();
for ($i = 0; $i < 1000; ++$i) {
$collection->insert(['x' => $i]);
}
$mc->close();
unset($mc, $collection);
class WorkerThread extends Worker
{
public function __construct($name)
{
$this->name = $name;
}
public function run()
{
$name = $this->name;
$getmores = 0;
$ctx = stream_context_create(array(
'mongodb' => array(
'log_getmore' => function($server, $info) use ($name, &$getmores) {
printf("%s: getmore\n", $name);
++$getmores;
},
),
));
$mc = new MongoClient(null, array(), array('context' => $ctx));
$cursor = $mc->test->foo->find();
$cursor->batchSize(10);
$i = 0;
foreach ($cursor as $document) {
++$i;
if ($name == 'b' && $getmores >= 10) {
printf("%s: closing MongoClient and returning\n", $name);
$mc->close();
return;
}
}
}
}
$workerA = new WorkerThread('a');
$workerB = new WorkerThread('b');
$workerA->start();
$workerB->start();
$workerA->join();
$workerB->join();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment