单处理器系统中的多线程程序

时间:2014-06-26 14:43:59

标签: mysql multithreading multiprocessing

我有一个线程问题。

假设我有一个单核处理器和一个单线程程序,并且该程序是多线程的。

我能否安全地假设在单个处理器系统中,如果线程持续进行某些工作而不是等待或睡眠,单线程程序将比多线程程序运行得更好?

对于多核处理器系统,它会改变吗?由于它是一个多线程程序而不是多进程程序。来自同一进程的线程是否可以利用系统的多处理器,或者它们将在同一处理器中运行?如果他们在同一个处理器中运行,那么上面的答案将满足这个问题

当我使用mysql时,我想到了这个问题。在mysql中,每个连接都有一个进程和多个线程,对吧? 如果是这种情况那么在单处理器系统中,如果我同时运行2个查询,那么一个接一个地运行2个查询需要更多的时间吗?

2 个答案:

答案 0 :(得分:1)

多个线程可以使用多个处理器。

如果这加快了应用程序的速度:取决于应用程序。锁定多个处理器非常昂贵。因此,如果您的线程之间需要大量同步,那么这将成为瓶颈。如果每个线程都可以自己工作,这肯定会加速应用程序。

同样在单处理器系统上:使用多个线程会降低整体速度(如果只是工作)但通常会缩短响应时间(因为这类系统的主要目标是在保持GUI的同时在工作线程中工作响应)。

使用MySql我不是专家。基本上如果你做两个查询(只读访问!),那么它们应该更快。如果您进行写访问,则可能需要同步查询(并且可能会运行得更慢)。

此外,您需要确保数据库本身对于所需的访问是多线程安全的(在速度和安全性之间始终存在权衡......)。如果你需要大量的突变,有时使用单个线程会更快......

答案 1 :(得分:0)

在单处理器系统上,程序运行的基本自然方式是单线程。还要明白,随着DMA的出现,没有系统仍然是单个处理器/核心,因为DMA与主程序“并行”(尽管内存仲裁器正在不断决定下一步实现某种锁定)。

此外,从程序中消除多线程消除了昂贵的上下文切换和锁定开销。所以,你是对的,单线程程序将在单处理器系统上运行得更快。

在多处理器/核心上,如果您的多线程/多进程程序执行大量锁定,速度将在很大程度上降低。但是请注意,锁定已经由硬件(即内存仲裁器)实现,因此速度增益不会与首次出现的处理器数量相乘。