我正在使用几种共享主机服务,并且多次想知道:他们是如何计算这些“CPU 秒数”的?
例如,其中一个限制我每月 300,000 秒、24 小时 10,000 秒和 2 小时 2,000 秒。但秒数可能很大程度上取决于主机提供商的硬件和软件(包括:我的应用程序和主机提供商的操作系统)。
所以我基本确定,如果我运行一些复杂且可能优化不佳的 SQL 请求,并且该请求持续 10 秒,我可能会“花费”恰好 10 个 CPU 秒。毫无疑问。
但是如果我在 PHP 脚本中设置延迟 ( <?php sleep(10); ?>
),它是否也会花费我相同的 10 秒 CPU 时间?或者如果我下载外部网页,并且它持续 3 秒 - 在这种情况下会一样吗?
主要我对 PHP 的file_get_contents()
CPU 消耗很感兴趣。
答案1
这是由内核调度程序完成的,当调度一个进程运行时,该进程的运行时间将添加到该进程的总运行时间中。调度程序选择一个进程每秒运行 100 到 1000 次,具体取决于操作系统和配置。(这个时间量就是时间片。)
Asleep(10)
将使用不到一微秒的 CPU 时间,因为它会导致进程停止运行。然后,调度程序将选择另一个进程开始运行(或者,如果没有准备好运行的进程,则 CPU 可以空闲)。然后将为该进程创建一个以10
秒为单位到期的计时器。届时,调度程序将选择在下一个可用时间片在 CPU 上运行的进程。
涉及文件 I/O 的操作也会导致进程停止运行,同时 CPU 等待磁盘或网络准备就绪,因此它们也不会占用太多的 CPU 时间。
确实需要 CPU 时间的操作包括读取/写入变量、执行数字数学运算、构建和扫描字符串变量、循环和 if 语句的操作。
没有简单的公式可以知道一个给定的程序将使用多少 CPU 时间。这取决于程序的具体功能。典型的网页只是读取/写入数据库,不会占用太多的 CPU 时间。