1000个进程同时利用file_put_contents的追加FILE_APPEND模式,不会出现写入的数据被覆盖?

<?php

// fork出1000个进程查询,内存大,cpu屌,1000个进程怎么了?

// 我买个CPU不就是为的用它么,你省着干什么?

for ( i = 1 ; i <= 1000; i++ ) {

  pid = fork();

  // 在子进程里查询

  if ( 0 == pid ) {

    ret = get_dizhi_by_phone( '手机号' );

    // 查询出来后,记录到data.log文件里

    file_put_contents( 'data.log', ret, FILE_APPEND );

    exit;

  }

}

考虑到 “多进程写入同一文件可能会导致数据覆盖” 可能会导致上亿的损失,我决定认真对待一下这个问题,于是我写了下面的代码测试了一波儿:

<?php

for ( $i = 1; $i <= 30; $i++ ) {

  $pid = pcntl_fork();

  if ( 0 == $pid ) {

    $my_pid = posix_getpid();

    for ( $counter = 1; $counter <= 10000; $counter++ ) {

      file_put_contents( "./api.log", "record\r\n", FILE_APPEND );

      //file_put_contents( "./api.log", date( 'Y-m-d H:i:s' ).' : '.$str."\r\n", FILE_APPEND|LOCK_EX );

    }

    exit;

  }

}

顺带给看不懂代码的萌新说明一下

PHP 1000个进程同时利用file_put_contents的追加FILE_APPEND模式的更多相关文章

  1. unity3d进程通信利用WM_COPYDATE和HOOK

    hello,近期用unity做了进程通信,应该是和c++的PC端实现通信,才開始一头雾水,后来实现了才知道好繁杂......先感谢对我提供帮助的百度,谷歌以及游戏圈的大大们. 在进程通信中非常多方法, ...

  2. 利用 ps 怎么显示所有的进程? 怎么利用 ps 查看指定进程的信息?

    ps -ef (system v 输出)ps -aux bsd 格式输出ps -ef | grep pid

  3. 利用 ps 怎么显示所有的进程? 怎么利用 ps 查看指定进 程的信息?

    ps -ef (system v 输出) ps -aux bsd 格式输出 ps -ef | grep pid

  4. 【zookeeper】4、利用zookeeper,借助观察模式,判断服务器的上下线

    首先什么是观察者模式,可以看看我之前的设计模式的文章 https://www.cnblogs.com/cutter-point/p/5249780.html 确定一下,要有观察者,要有被观察者,然后要 ...

  5. Linux下利用expect,不用交互模式,直接登陆远程主机

    Linux环境下只有在机器20.200.254.18上ssh dataconv@20.200.31.23才能连接到23的机器,而且还需要输入密码(每次都需要输入地址,密码很烦),所以利用expect写 ...

  6. Windows系统的四个重要概念——进程、线程、虚拟内存、内核模式和用户模式

    引言 本来在写一篇Windows内存管理的文章,写着写着就发现好多基础的概念都要先讲.更可怕的是,这些基础的概念我却不能完全讲清楚.只好再把这本<深入解析Windows操作系统>翻到第一章 ...

  7. Java编程思想:利用内部类实现的工厂模式

    public class Test { public static void main(String[] args) { Factories.test(); } } /* 设计模式之禅中的工厂模式是这 ...

  8. 利用Mongoose来结构化模式与验证

    Mongoose是一个文档对象模型(ODM)库,为MongoDB Node.js原生驱动程序提供更多的功能. 把结构化的模式应用到一个MongoDB集合,提供了验证和类型转换的好处 Mongoose通 ...

  9. 使用github的使用,利用git shell命令行模式进行操作

    一.登录到git,新建一个版本仓库 二.在"Repository name"一栏里填写版本仓库的名称,如"test",Description栏是描述,可填可不填 ...

随机推荐

  1. manager.add_command('runserver', Server('0.0.0.0', port='8093', extra_files=extra_files))

    extra_files: a list of files the reloader should watch                    additionally to the module ...

  2. 【还是畅通工程 HDU - 1233】【Kruskal模板题】

    Kruskal算法讲解 该部分内容全部摘录自刘汝佳的<算法竞赛入门经典> Kruskal算法的第一步是给所有边按照从小到大的顺序排列. 这一步可以直接使用库函数 qsort或者sort. ...

  3. php备忘录模式(memento pattern)

    晚上刷起来. <?php /* The memento pattern provides the object restore functionality. Implementation is ...

  4. Docker 中 MySQL 数据的导入导出

    Creating database dumps Most of the normal tools will work, although their usage might be a little c ...

  5. Does Swift support aspect oriented programming?

    The foundation of Aspect Oriented Programming is the intercept pattern. We start with a crosscutting ...

  6. POJ2139-Six Degrees of Cowvin Bacon-(Floyd_Warshall)

    题意:有n只牛拍电影m部电影,知道每部电影有哪些牛参与,一起拍电影的牛之间维度为1,ab拍电影则ab之间的维度为1,如果bc一起拍电影,ac没有一起,则ac之间的维度为2,以此类推.求哪知牛到所有牛之 ...

  7. 一种动态的样式语言--Less 之 命名空间

    LESS 命名空间 如果想更好的组织CSS或者单纯是为了更好的封闭,将一些变量或者混合模块打包起来,你像下面这样在#bundle中定义一些属性集之后可以重复使用: #bundle{ .button() ...

  8. OpenCV应用(3) 简单轮廓匹配的小例子

    具体应用 https://blog.csdn.net/kyjl888/article/details/85060883 OpenCV中提供了几个与轮廓相关的函数: findContours():从二值 ...

  9. MongoDB权限配置

    参考文章:https://blog.csdn.net/qq_26896281/article/details/81206492 https://blog.csdn.net/u012373281/art ...

  10. 从Hello World 来讲解线程

    从一个经典的例子开始:一个打印“Hello World.”的程序.一个非常简单的在单线程中运行的Hello World程序如下所示,当我们谈到多线程时,它可以作为一个基准. #include<i ...