我是多线程的新手......多线程用于提高性能,但是如果处理器已经尽可能快地为单个线程工作,那怎么会这样呢?
解释:
在单线程环境中,用户A启动一项需要1秒的任务 - 任务在1秒内完成。 用户B在几分之一秒后启动相同的任务并且必须等待用户A,因此用户Bs任务在近2秒内完成。现在,如果这是一个多线程环境,两个任务都不能同时运行,导致两个任务都花费2秒钟? ...例如。任务A的一部分完成,然后是任务B的一部分,然后是任务A的一部分,然后是任务B的一部分,......直到最终两个任务在大约两秒内完成?
如果有多个处理器,它会更快吗?或者,如果在处理大任务时需要保留多线程,并且在此期间需要弹出较小的任务?
答案 0 :(得分:4)
如果任务是100%CPU绑定,并且您只有一个CPU核心,那么多线程会使事情变慢。如果您有多个CPU核心,显然您可以分配与核心一样多的线程来提高性能。如果任务与任何外部(I / O)交互,则多线程可以将性能提高到一定程度。当一个线程正在等待I / O完成时,其他线程可以执行基于CPU的处理。
经典示例是一个执行计算并显示GUI的程序。您在一个线程(事件线程)上更新GUI,并在其他“后台”线程上执行所有处理。事件线程除了处理用户交互之外什么也不做。如果您不这样做,那么当用户请求的操作需要相当长的时间时,GUI将停止响应。在这种情况下,即使在单核系统上也可以运行多线程。
如何调整应用程序对线程的使用取决于很多因素,并且可能会占用整本教科书。
答案 1 :(得分:0)
好的,现在考虑您的任务A需要特定资源(来自网络文件或用户输入)才能完成其工作。现在说任务A所需的资源当前不可用,所以单线程环境中接下来会发生的事情是任务A控制了CPU,所以它会等待资源可用,此时 CPU将空闲,这意味着我们在等待其他资源时浪费了一个重要的资源,即 CPU时间。但是,如果任务A已在多线程环境中实现,当任务A等待资源时,它(任务A线程)将暂停,直到资源可用并且CPU时间可以有效使用执行其他任务。希望这会有所帮助:)