点击(此处)折叠或打开
- <?php
- $n = "1\n";
-
- $fp = @fopen('2.txt', 'ab');
- flock($fp, LOCK_EX|LOCK_NB);
- fwrite($fp, $n);
- flock($fp, LOCK_UN);
- fclose($fp);
对比file_put_contents和fwrite的性能,是用的循环100w次写入的方式对比,记得当时的结论是,file_put_contents用了300多秒,fwrite 10秒,那是因为,他讲fopen和fcolse放到了循环外,如果你100w拼成一个长字符,最后一次写入,那肯定更快。所以很多结论都是有特定场景的。
点击(此处)折叠或打开
- Concurrency Level: 50
- Time taken for tests: 0.095 seconds
- Complete requests: 100
- Failed requests: 0
- Write errors: 0
- Total transferred: 21500 bytes
- HTML transferred: 0 bytes
- Requests per second: 1049.80 [#/sec] (mean)
- Time per request: 47.628 [ms] (mean)
- Time per request: 0.953 [ms] (mean, across all concurrent requests)
- Transfer rate: 220.42 [Kbytes/sec] received
当然了,这两个函数,和你的系统,软件版本,文件系统有很大的关系,linux下的性能明显比window要好一些。所以这里就像我上篇文章说的,web程序,和你做一个类似的批处理程序,写法是不一样,因为着重的点不一样。就是因为没有锁,所以才有好的并发效果,但是你如果一定要强制写入的完整,就需要牺牲并发的性能。
如果我们在做文件处理脚本,就适合使用颗粒度更小的函数,这样你才能在关键点,通过函数、系统逻辑特性做出优化。所以没有银弹,任何的东西都是相对的。