polonskiy/phproutine
最新稳定版本:v0.1.0
Composer 安装命令:
composer require polonskiy/phproutine
包简介
Goroutines in PHP
README 文档
README
PHProutine is a gouroutines emulation in PHP. Inspired by Golang and https://gist.github.com/elimisteve/4442820
Examples
Goroutines
// Steve Phillips / elimisteve // 2013.01.03 package main import "fmt" // intDoubler doubles the given int, then sends it through the given channel func intDoubler(ch chan int, n int) { ch <- n*2 } func main() { // Make channel of ints ch := make(chan int) answer := make(chan string) // Spawn 3 goroutines (basically threads) to process data in background go intDoubler(ch, 10) go intDoubler(ch, 20) go func(a, b int) { ch <- a+b }(30, 40) // Take 2 ints, write sum to `ch` // Create anonymous function on the fly, launch as goroutine! go func() { // Save the 3 values passed through the channel as x, y, and z x, y, z := <-ch, <-ch, <-ch // Calculate answer, write to `answer` channel answer <- fmt.Sprintf("%d + %d + %d = %d", x, y, z, x+y+z) }() // Print answer resulting from channel read fmt.Printf("%s\n", <-answer) }
PHProutines
<?php require __DIR__ . '/../src/Channel.php'; require __DIR__ . '/../src/Runner.php'; use PHProutine\Channel; use PHProutine\Runner; // intDoubler doubles the given int, then sends it through the given channel function intDoubler($ch, $n) { $ch->write($n * 2); } $runner = new Runner; // Make channels $ch = new Channel; $answer = new Channel; // Spawn 3 PHProutines (basically PROCESSES) to process data in background $runner->go('intDoubler', $ch, 10); $runner->go('intDoubler', $ch, 20); $runner->go(function($a, $b) use ($ch) { $ch->write($a + $b); }, 30, 40); // Create anonymous function on the fly, launch as PHProutine! $runner->go(function() use ($ch, $answer) { // Save the 3 values passed through the channel as x, y, and z list($x, $y, $z) = [$ch->read(), $ch->read(), $ch->read()]; // Calculate answer, write to `answer` channel $answer->write(sprintf('%d + %d + %d = %d', $x, $y, $z, $x + $y + $z)); }); // Print answer resulting from channel read printf("%s\n", $answer->read());
Echo server
<?php require __DIR__ . '/../src/Runner.php'; use PHProutine\Runner; $server = stream_socket_server('tcp://127.0.0.1:8000'); $runner = new Runner; while (true) { $client = stream_socket_accept($server, -1); $runner->go(function() use ($client) { stream_copy_to_stream($client, $client); }); fclose($client); }
SleepSort
<?php //usage: php sleepsort.php 3 2 1 4 require __DIR__ . '/../src/Channel.php'; require __DIR__ . '/../src/Runner.php'; use PHProutine\Channel; use PHProutine\Runner; $runner = new Runner; $channel = new Channel; array_shift($argv); foreach ($argv as $val) { $runner->go(function($v) use ($channel) { sleep($v); $channel->write($v); }, $val); } foreach ($argv as $val) { echo $channel->read(), "\n"; }
统计信息
- 总下载量: 119.72k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 60
- 点击次数: 1
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2014-12-04