【问题标题】:multithreaded program in a single processor system单处理器系统中的多线程程序
【发布时间】:2014-08-17 11:36:46
【问题描述】:

我有一个线程问题。

假设我有一个单核处理器和一个单线程程序以及同一个多线程程序。

我是否可以安全地假设在单处理器系统中,当线程连续执行某些工作而不是等待或休眠时,单线程程序将比多线程程序运行得更好?

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

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

【问题讨论】:

    标签: mysql multithreading multiprocessing


    【解决方案1】:

    在单处理器系统上,程序运行的底层自然方式是单线程的。还请理解,随着 DMA 的出现,没有系统保持单个处理器/内核,因为 DMA 与主程序“并行”工作(尽管内存仲裁器不断决定谁下一个实施某种锁定)。

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      对于 MySql,我不是专家。基本上,如果您执行两个查询(只读访问!),那么它们应该更快。如果您确实具有写访问权限,则可能需要同步查询(并且可能会运行得更慢)。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-01
        • 1970-01-01
        • 2013-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多