今天我的老板和我正在讨论我写的一些代码。我的代码从给定的 HTTP/HTTPS 链接下载 3 个文件。我进行了多线程下载,以便所有 3 个文件在 3 个单独的线程中同时下载。在这次讨论中,我的老板告诉我,代码将交付给最有可能运行旧硬件和软件的人(我说的是 Windows 2000)。
在此之前,我从未考虑过线程应用程序如何在旧硬件上扩展。我意识到如果 CPU 只有 1 个核心,线程是无用的,甚至可能会降低性能。我一直想知道这个下载任务是否是 I/O 操作。意思是,如果一个 API 在等待来自 HTTP/HTTPS 服务器的信息时被阻塞,是否会同时调度另一个想要进行计算的线程?较旧的操作系统会进行这样的调度吗?
他说的另一件事是:由于代码将在旧机器上运行,我的应用程序不应该占用 CPU。他说Sleep()
在 CPU 密集型任务之后使用调用来给其他程序一些喘息的空间。现在我总是觉得Sleep()
在任何程序中使用都很糟糕。我错了吗?什么时候使用Sleep()
合理?
感谢您的关注!