先说结论,单次性能,file_put_contents要比fwrite好,这个也很好理解,因为写入文件,file_put_contents就一行代码,fwrite至少三行,虽然不是说代码行少就一定快,但就这个写入功能来说,file_put_contents就等于fopen fwrite fclose,之所以前者快,就是因为一次api交互,直接干了这三件事,后者有三次api的开销。

再说问题,其实不能说是问题,应该说是一个需要注意的点,默认情况下,两者都是不是使用独占锁的方式运行,所以在高并发下,会有写入的内容被覆盖的问题。这里需要通过独占锁的方式来解决。

之前过某篇文章,对比file_put_contents和fwrite的性能,是用的循环100w次写入的方式对比,记得当时的结论是,file_put_contents用了300多秒,fwrite 10秒,那是因为,他讲fopen和fcolse放到了循环外,如果你100w拼成一个长字符,最后一次写入,那肯定更快。所以很多结论都是有特定场景的。

实验一、

ab

结果,多次验证取中间结果

2.txt写入了86行,这里就出现了高并发下的问题,这里注意qps为1329

实验二、

结果

2.TXT写入81行,发现qps的确是比file_put_contents低一些,1278

实验三、

结果:

 

2.txt这次写入了100行,没有丢失,但是qps发现下降了不少1187

实验四、

结果:

 

2.txt同样没有丢失,qps也是有下降。

当然了,这两个函数,和你的系统,软件版本,文件系统有很大的关系,linux下的性能明显比window要好一些。所以这里就像我上篇文章说的,web程序,和你做一个类似的批处理程序,写法是不一样,因为着重的点不一样。就是因为没有锁,所以才有好的并发效果,但是你如果一定要强制写入的完整,就需要牺牲并发的性能。

如果我们在做文件处理脚本,就适合使用颗粒度更小的函数,这样你才能在关键点,通过函数、系统逻辑特性做出优化。所以没有银弹,任何的东西都是相对的

程序本天成,妙手偶得之!我们只是代码的搬运工!

转载请注明:http://www.521php.com/archives/2004/comment-page-1/

目前有12 条留言

  1. 2016年10月06日 上午 11:41 广告任务网   |  引用  |  #1     

    月黑风高夜,访问博客时!

  2. 2016年10月16日 下午 4:02 蒂欧娜   |  引用  |  #2     

    来看看,学习学习!!

  3. 2016年10月19日 下午 2:43 kuyus   |  引用  |  #4     

    路过~混个脸熟。

  4. 2016年10月19日 下午 2:45 PHP程序员雷雪松   |  引用  |  #5     

    学习学习

  5. 2016年10月20日 下午 7:56 天下彩   |  引用  |  #6     

    谢谢分享,涨知识了

  6. 2016年10月25日 下午 2:30 网赚论坛   |  引用  |  #7     

    访问您的博客已成习惯!

  7. 2016年10月27日 上午 10:22 浙江经济理事会   |  引用  |  #8     

    支持,谢谢分享!

  8. 2016年11月01日 上午 8:59 一生一世套图   |  引用  |  #9     

    三天不来手痒痒!

  9. 2016年11月03日 上午 8:08 华夏九州套图   |  引用  |  #10     

    我只是来随便看看!

  10. 2016年11月06日 上午 11:27 广告任务网   |  引用  |  #11     

    很不错的样子⊙0⊙

发表评论

昵称:

网址:

eg.博客主题调用的是Gravatar头像,你可以通过邮箱注册获得头像.
/ 快捷键:Ctrl+Enter