swoole 新的 api 文件协程: co::fread 和 co::fwrite 函数

2017-12-21 16:47:16 +08:00
 gouchaoer

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 内完成

1801 次点击
所在节点    PHP
1 条回复
gouchaoer
2017-12-21 16:49:10 +08:00
不过每个协程的裸内存开销是 266KB 左右,没有 go 那样占用内存小

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/416594

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX