我有一个关于线程的问题。
假设我有一个单核处理器和一个单线程程序,同样的程序是多线程的。
我可以放心地假设,在单处理器系统中,当线程持续执行某些工作而不等待或休眠时,单线程程序将比多线程程序运行得更好吗?
另外,对于多核处理器系统,它会发生变化吗?因为它是一个多线程程序,而不是多进程程序。来自同一进程的线程是否可以利用系统的多处理器,或者它们将在同一处理器中运行?如果它们在同一处理器上运行,则上述答案将满足此问题
当我使用mysql时,这个问题突然出现在我的脑海中。在mysql中,每个连接都有一个进程和多个线程,对吗?如果是这种情况,那么在单处理器系统中,如果我同时运行两个查询,那么比一个接一个地运行这两个查询需要更多的时间?
发布于 2014-06-26 23:13:44
多个线程可以使用多个处理器。
如果这加快了应用程序的速度:取决于应用程序。在多个处理器上进行锁定是非常昂贵的。因此,如果你需要在你的线程之间进行大量的同步,那么这将成为一个瓶颈。如果每个线程都能为自己工作,这肯定会加快应用程序的运行速度。
同样在单处理器系统上:使用多线程会降低整体速度(如果只做工作),但通常会改善响应时间(因为在这样的系统上,主要目标是在工作线程中做工作,同时保持GUI响应)。
对于MySql,我不是专家。基本上,如果您执行两个查询(只读访问!)那么他们应该更快。如果您确实具有写访问权限,则可能需要同步查询(并且可能会运行较慢)。
此外,您需要确保DB本身对于所需的访问是多线程安全的(在速度和安全性之间总是需要权衡的……)。如果你需要很多变化,有时使用单个线程会更快……
发布于 2015-07-12 11:29:19
在单处理器系统上,程序的底层自然运行方式是单线程的。还请理解,随着DMA的出现,任何系统都不会保留单个处理器/内核,因为DMA与主程序是“并行”工作的(尽管内存仲裁器不断决定谁将执行某种类型的锁定)。
此外,从程序中消除多线程也消除了昂贵的上下文切换和锁定开销。所以,你是对的,单线程程序在单处理器系统上会运行得更快。
在多处理器/核心上,如果您的多线程/多进程程序执行大量的锁定,速度将在很大程度上降低。但请注意,硬件已经锁定,即内存仲裁器,因此速度增益不会像第一次出现的那样与处理器数量成倍增加。
https://stackoverflow.com/questions/24433529
复制相似问题