php xattr操作文件扩展属性后续

由于之前看了xattr的写入效率,这里简单的实现一下生产者消费者模型的高速写入。

生产者(让他创建40万条数据)

<?php
// 生产者 不断的生产大量数据 但是总会有停止的时候(本业务功能结束)
for ($i=100000; $i < 500000; $i++) {
  $file = "./nodes/{$i}.txt";
  touch($file);
  xattr_set($file, 'dataCount', $i);
}

消费者(让他消费这生成的数据,存储到一个综合的文件里面。)

复制代码
<?php
// 消费者 不断的读取生产的数据进行处理或者数据落地 没有停止的时候(为了避免与生产者有并发读写 自己会按时休息一会儿)

is_dir("./nodes") || mkdir("./nodes");

while (1) {
  $result = [];
  $list = glob("./nodes/*.txt");
  if ($list) {
    $list = array_slice($list, 0, 10000);
    foreach ($list as $file) {
      $result[] = xattr_get($file, 'dataCount');
      unlink($file);
    }
    file_put_contents('data.log',"\r\n" . implode("\r\n", $result), FILE_APPEND);
  }
  usleep(1000);//休息1ms
}
复制代码

我们让消费者每1ms休息一下,避免CPU占用过高。

发现最终写入数据40万条,其投递效率是很高的!

这只是一个非常简单的骨架模型,我们可以用它做更多的扩展,本案例执行步骤如下:

先运行  php 消费者.php

再运行  php 生产者.php

posted @   李照耀  阅读(54)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示