fliglio / borg
Fliglio Borg
2.3.4
2020-06-18 14:16 UTC
Requires
- php: >=5.6
- fliglio/http: 2.3.*
- fliglio/web: 2.3.*
- php-amqplib/php-amqplib: 2.6.*|2.7.*
Requires (Dev)
- doctrine/annotations: 1.*
- doctrine/cache: 1.*
- fliglio/chinchilla: 2.3.*
- fliglio/flfc: 2.3.*
- fliglio/fli: 2.3.*
- fliglio/http: 2.3.*
- fliglio/routing: 2.3.*
- fliglio/web: 2.3.*
- guzzlehttp/guzzle: ~5.0
- phpunit/phpunit: 5.*
- symfony/validator: 3.4.*
This package is auto-updated.
Last update: 2024-09-18 23:33:58 UTC
README
Fliglio.Borg
Fliglio\Borg
是 goroutines(由 golang 推广)的实现,为 PHP 提供一个分布式并行并发框架。
如果你是 Borg 集体的成员,你就不会自己做什么。你不会自己做决定,不会自己解决问题,当然也不会自己工作——你会在集体中分配工作量!
现在你也可以这样做。
待办事项/注意事项
下一步
- 支持向 Chans 和集体程序发送
null
- 使行为符合典型的 PHP 习惯(见此处)
- 添加
sync
概念- 集体程序调度返回一个退出
Chan
- 每个集体程序在这个
Chan
上发送异常的null
- 主进程调用
sync
,传入一个退出 Chans 的数组;这将阻塞,直到所有都返回一个值。如果值是一个异常,它将被重新抛出。
- 集体程序调度返回一个退出
其他
- 集体程序必须是精确类型。你不能用接口提示你的方法,并传入一个实现(提示用于反序列化参数。)
- 只有集体程序是多云数据中心感知的。Chans 只能在你的本地数据中心使用。
- 尽管 Chan 排序始终得到保证,但 ChanReader 引入了一些奇怪之处,其中发布到不同 Chans 的消息可能会以错误的顺序读取(见下文)
Chan::get
通过轮询basic_get
实现。迭代使用basic_consume
会更好
ChanReader
ChanReader 存在竞态条件,其中无法保证通道之间的顺序。在下面的示例中,即使 $ex
在所有数字添加到 $ch
后被添加,$ex
的值可能会先到达 ChanReader
。在这种情况下,请考虑向 $ch
发送一个 null
来表示工作已完成。
public function generateNumbers(GetParam $limit) {
$ch = $this->mkChan();
$ex = $this->mkChan();
$this->coll()->gen($ch, $ex, $limit->get());
$nums = [];
$r = $this->coll()->mkChanReader([$ch, $ex]);
while (true) {
list($id, $val) = $r->get();
switch ($id) {
case $ch->getId():
$nums[] = $val;
break;
case $ex->getId():
return $nums;
}
}
}
public function gen(Chan $ch, Chan $ex, $limit) {
for ($i = 0; $i <= $limit; $i++) {
$ch->add($i);
}
// sleep for a second to avoid the possibility that the $ex value is read before $ch's last value
sleep(1);
$ex->add(true);
}
本地莎士比亚
$this->urlsd = [
__DIR__ . '/../../../../shakespeare-txt/shakespeare-alls-11.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-antony-23.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-as-12.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-comedy-7.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-coriolanus-24.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-cymbeline-17.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-first-51.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-hamlet-25.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-julius-26.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-king-45.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-life-54.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-life-55.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-life-56.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-lovers-62.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-loves-8.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-macbeth-46.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-measure-13.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-merchant-5.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-merry-15.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-midsummer-16.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-much-3.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-othello-47.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-pericles-21.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-rape-61.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-romeo-48.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-second-52.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-sonnets-59.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-taming-2.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-tempest-4.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-third-53.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-timon-49.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-titus-50.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-tragedy-57.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-tragedy-58.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-troilus-22.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-twelfth-20.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-two-18.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-venus-60.txt',
__DIR__ . '/../../../../shakespeare-txt/shakespeare-winters-19.txt',
__DIR__ . '/../../../../shakespeare-txt/sonnets.txt',
];