【发布时间】:2014-03-02 22:52:37
【问题描述】:
假设您有一个写入文件的进程,并且执行时间正好为 1 秒(理论上)。您在文件上加锁以防止在写入时写入;但是这个问题应该适用于任何比赛条件。最好是“循环检查”还是“等待信号”(如PHP中的pcntl_sigwaitinfo和pcntl_signal)。
如果首选“循环和检查”,为了获得最佳性能,等待接收锁的进程应该休眠多长时间,或者换句话说,进程应该多久唤醒一次以检查锁的状态?
假设 CPU 循环时间为 20 纳秒 (ns):
如果您等待 1 整秒,则浪费的最大时间为 ( 1s - 1ns ) 或几乎一整秒,假设前一个进程在最后一次检查后 1ns 完成。然而,过于频繁地检查也是一种浪费。我正在考虑使用
[ ( Execution Time / (4 * Execution Time) ].
考虑到执行的长度,这个公式应该减少到检查 4 次。大家觉得呢?
【问题讨论】:
-
如果需要信号量,希望避免 Wait 和 Signal,因为它们在 PHP 中不是跨平台的。
-
我不是文件系统方面的专家,但这对于 PHP 来说似乎太低级了。
-
平均执行时间是通过测试而不是实时计算得出的。
-
S.O 的目标是实践,而不是理论
-
好的,我的过程实际上平均只需要一 (1) 秒。检查前我应该睡多久? (我认为一个公式有助于扩大答案......为什么“理论”是一个既定的标签?)
标签: php multithreading theory