我有两个命令 A 和 B。我想同时执行它们,但在 Linux 中唯一可行的方法是使用 &。也就是说,
$ A &
$ B
我不希望 0 延迟两个命令,但大约应该期望多少?以毫秒、微秒还是纳秒为单位?谢谢。
答案1
请注意,这个问题的答案取决于系统在特定时间的具体操作。例如:
- 您正在使用什么内核调度程序(它们的延迟不同)
- 您正在运行哪些进程(它们都在争夺时间,并且调度程序可能不会像您希望的那样尽早选择您的进程)
可能还有上千种其他原因。因此,自己运行这个测试。还请注意,以下内容可能在很多细微的方面都是错误的,因为我对如何获得最佳性能并不是很了解bash
(zsh
严格来说,因为这是我的登录 shell)。
考虑到这一点,我设计了一种简单的方法来测试这一点。GNU date 有一种方法可以显示纳秒(是的,你没看错)。因此,要获取一堆数据,你需要做的就是:
get_starting_diff() {
date +%N & date +%N
}
# 5,000 iterations is probably good enough statistically
for iteration in $(seq 1 5000); do
get_starting_diff
done > times
这(除了咀嚼很多PID)生成 10,000 行文件,其中包含时间信息。然后,您可以使用以下 Python (v3.4) 脚本来了解您的平均时间差异:
def pairwise(iterator):
"Takes an iterator and extracts sequential pairs from it"
pair = []
for item in iterator:
pair.append(item)
if len(pair) == 2:
yield pair
pair = []
diffs = []
with open('times') as data:
for start1, start2 in pairwise(data):
diffs.append(int(start2) - int(start1))
diffs.sort()
median = diffs[len(diffs) // 2]
mean = sum(diffs) / len(diffs)
print("The median difference is", median / 1000000, "milliseconds")
print("The mean difference is", mean / 1000000, "milliseconds")
在我的系统(Ubuntu 13.10,Linux 3.12.0-997-generic)上,这给了我:
The median difference is 1.077483 milliseconds
The mean difference is 3.680928442211055 milliseconds
答案2
您正在运行并行任务。不要假设它们将以什么顺序运行。它们可以按任何顺序运行。B 甚至可以在 A 开始之前运行完成。那么下次运行它时,您可能会得到完全不同的结果。