php - 用微时间测量持续时间随机结果为零
问题描述
我有一个这样的循环:
<?php
ini_set('memory_limit', '16024M');
ini_set('set_time_limit', 9999);
ini_set('max_execution_time', 9999);
ini_set('display_errors', TRUE);
ini_set('error_reporting', E_ALL);
for ($k = 1; $k <= 50; $k++) {
$haystack = array();
for ($i = 1; $i <= 100; $i++) {
$randomChar = substr(md5(microtime()),rand(0,26), 1);
$haystack[] = $randomChar;
}
$haystack[] = 'X';
$startTime = microtime(true);
// sleep(0);
$result = in_array('X', $haystack);
$endTime = microtime(true);
echo number_format(1000000 * ($endTime - $startTime), 20, ",", " ") . ' ';
}
这些是输出的前几行:
1,90734863281250000000 0,95367431640625000000 1,19209289550781250000 1,90734863281250000000 1,19209289550781250000 0,95367431640625000000 0,95367431640625000000 1,90734863281250000000 0,95367431640625000000 20,02716064453125000000 0,95367431640625000000 1,19209289550781250000 0,95367431640625000000 0,95367431640625000000 0,00000000000000000000 0,95367431640625000000 0, 95367431640625000000 0,95367431640625000000 0,00000000000000000000 0,95367431640625000000 0,00000000000000000000
如您所见,有几行说明持续时间为“0”——这实际上是不可能的。如果我取消注释包含sleep(0)命令的行,则没有零持续时间。
系统设置
- PHP 7.0 与 FPM
- nginx 1.10.3
- Ubuntu 16.04
我在 CLI 上运行循环并通过浏览器调用它。
解决方案
数组中的 101 个项目对于智能 php 来说足够小了,它具有静态优化技巧和强大的 cpu。
如果您想看到 0-s 消失了,那么生成 1000 个项目:
for ($i = 1; $i <= 1000; $i++) {
$haystack[] = substr(md5(microtime()),rand(0,26), 1);
}
PS 我已经使用 7.1 和 5.6 检查了您的代码,因此存在很大差异:
推荐阅读
- css - 旋转时是否可以保持渐变静止
- spring-boot - Spring Boot swagger SocketIO 创建 1 个“全局”连接?或者在每个 API 调用上连接和断开连接?
- javascript - 空格显示为问号
- logging - 便于处理日志
- google-cloud-vision - 发布到 Google Vision API 时出现 400 错误
- swift - 不支持 SWIFT_VERSION 3.2
- c# - 在 .NET 中安排具有优先级的任务
- oauth-2.0 - 将自定义 JSON 映射到 ClaimActions
- python - Python 噪声库中的 Perlin 噪声
- javascript - 通过键对数组进行分组