swoole server 里面也好,或者单纯的 php-cli 脚本里也好,现在可以像 go 那样写重磁盘 IO 的任务了,举个例子: 往 2500 个文件中分别写入 1KB 的数据
<?php
use Swoole\Coroutine as co;
ini_set('memory_limit', -1);
$ct=0;
for($i=0;$i<2500;$i++)
{
co::create(function () use (&$ct)
{
$uid = \Swoole\Coroutine::getuid();
$fp = fopen(__DIR__ . "/test/{$uid}", "a+");
$str='';
for($j=0;$j<1024;$j++)$str.='1';//1K
$r = co::fwrite($fp, $str);
$ct++;
//echo "|{$ct}";
});
}
function shutdown()
{
global $ct;
echo "ct:{$ct}, mem_peak:".memory_get_peak_usage().", mem:".memory_get_usage().PHP_EOL;
}
register_shutdown_function('shutdown');
php fwrite.php
ct:2500, mem_peak:665626736, mem:513288
0.5s 内完成
1
gouchaoer OP 不过每个协程的裸内存开销是 266KB 左右,没有 go 那样占用内存小
|