Multithreading 在单核CPU上使用多线程是否有任何好处?

Multithreading 在单核CPU上使用多线程是否有任何好处?,multithreading,Multithreading,我知道在单核CPU中使用多线程是可能的。但是有人能帮我解决一个可能有用的情况或场景吗。在一轮面试中,我被问到了这个问题。即使是单核CPU的机器也有I/O设备:网卡、硬盘、键盘、鼠标等。典型的线程将计算与I/O操作混合在一起。当一个线程等待从设备读取数据时,它释放CPU,如果另一个线程存在,它可以被另一个线程使用,这意味着使用多线程 当I/O操作所花费的时间可以忽略不计时,多线程仍然是有用的——如果任务可以自然并行,它可以使程序变得更简单。线程是并发的模型:使用线程可以让您编写一个程序,其中多个有

我知道在单核CPU中使用多线程是可能的。但是有人能帮我解决一个可能有用的情况或场景吗。在一轮面试中,我被问到了这个问题。

即使是单核CPU的机器也有I/O设备:网卡、硬盘、键盘、鼠标等。典型的线程将计算与I/O操作混合在一起。当一个线程等待从设备读取数据时,它释放CPU,如果另一个线程存在,它可以被另一个线程使用,这意味着使用多线程

当I/O操作所花费的时间可以忽略不计时,多线程仍然是有用的——如果任务可以自然并行,它可以使程序变得更简单。

线程是并发的模型:使用线程可以让您编写一个程序,其中多个有状态的活动以各自的速度进行,相互独立的

并行处理是并发的一种形式,因此线程是利用多处理器系统资源的一种方式,但在程序中有并发活动还有其他原因

一个典型的例子是服务器,它可以支持任意多个并发的、有状态的客户端连接。服务器有一个等待新连接的线程,该线程在每次接受新连接时创建一个新的客户端线程。每个客户机线程等待来自其客户机的消息,并相应地提升其状态。每个客户机连接的状态可以部分隐式地存在于客户机线程堆栈上的局部变量中,以及线程在任何给定时刻在代码中执行的位置。这种设计比单线程更容易理解,因为单线程必须接受来自每个客户机的输入,并显式存储和更新每个客户机的状态



我个人的偏好是描述我创建的每个线程,首先说线程等待什么:上面示例中的服务器线程等待新客户机。每个客户端线程都等待来自其客户端的命令。在GUI应用程序中,GUI线程等待键盘和鼠标事件。在并行处理场景中,存在等待执行任务(计算)的工作线程。等等。

它没有用。强制一个程序只使用一个内核可能是错误的。“这不是一个好的面试问题,也许他们不是这样表述的。”HansPassant,线程是在多处理器系统成为商业现实之前很多年发明的。早在20世纪80年代中期,我就在为单处理器系统编写多线程代码。孩子们。