php脚本使用多进程处理数据

 1 <?php
 2 ini_set('memory_limit', -1);
 3 require dirname(__DIR__) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
 4 
 5 
 6 $arr = range(0, 1000000);
 7 
 8 class TestRunnable implements \Jenner\SimpleFork\Runnable
 9 {
10     protected $data;
11 
12     public function __construct(array $data)
13     {
14         $this->data = $data;
15         #$this->data[0] = 1;
16     }
17 
18     /**
19      * @return void
20      */
21     public function run()
22     {
23         sleep(10);
24         echo getmypid() . ':done当前内存'.(memory_get_usage()/2014/1024).'M' . PHP_EOL;
25     }
26 }
27 
28 
29 echo '当前内存'.(memory_get_usage()/1024/1024).'M'.PHP_EOL;
30 
31 $pool = new \Jenner\SimpleFork\Pool();
32 $pool->execute(new \Jenner\SimpleFork\Process(new TestRunnable($arr)));
33 $pool->execute(new \Jenner\SimpleFork\Process(new TestRunnable($arr)));
34 $pool->execute(new \Jenner\SimpleFork\Process(new TestRunnable($arr)));
35 
36 $pool->wait();

注意利用fork进程写时复制特性节省内存

15行代码注释时,

当前内存32.427764892578M
1545:done当前内存16.514655225919M
1546:done当前内存16.515000465492M
1547:done当前内存16.515151750248M

15行代码未注释时,

当前内存32.428451538086M
1536:done当前内存32.787138468222M
1537:done当前内存49.05961783143M
1538:done当前内存65.331903239821M

posted @ 2019-11-27 15:39  fly不起来啊!  阅读(443)  评论(0编辑  收藏  举报