为什么这句话是正确的? “花费大量时间等待外部事件的任务通常是线程的理想选择”

问题描述

我对线程概念非常陌生。我正在浏览this site中有关线程的内容,并遇到了这样的说法:Tasks that spend much of their time waiting for external events are generally good candidates for threading.我可以知道为什么这句话是正确的。

解决方法

线程允许高效地使用 CPU 。可以通过Threading将花费大量时间等待其他事件完成的任务置于 sleep (这意味着暂时停止)。

通过将线程放入 sleep ,正在执行的 CPU 可以自由地执行其他任务,同时等待线程被唤醒。

睡眠醒来的功能允许:

(1)计算速度更快,而没有太多开销

(2)减少计算资源的浪费

,

替代观点:

我不特别了解Python,但是在许多其他编程语言/库中,将有某种“异步I / O”机制,“选择”机制或“事件驱动”范式可实现一个单线程程序可以主动做一件事,同时等待其他事情发生。

线程解决的问题来自以下事实:每个独立的输入/事件源通常会驱动一些独立的“活动”,并且这些活动中的每个活动都有其自己的独立状态。在异步/事件驱动的编程风格中,每个活动的状态必须在一组变量中明确表示:程序收到驱动活动 X 的事件时,它必须能够检查这些变量,以便上一次在活动 X上进行操作时,它可以“从中断处拾取”。

对于线程,活动 X 的部分或全部状态可以在 X 线程的 {{3}中隐式 } (即,在其程序计数器的值,在其寄存器中以及在其调用堆栈的内容中。)处理一个特定活动的线程的代码看起来很像纯过程代码我们都是初学者时首先学会编写的代码,它比任何“事件处理程序”和显式状态变量系统都要熟悉得多。

使用多个线程的不利之处在于,代码的熟悉外观会使我们陷入一种虚假的安全感-我们很容易忽略context和{{3} },以及多线程暴露给我们的其他危险。多线程代码很容易阅读,但是编写代码却要难得多,而不会犯一些难以在测试中发现的细微错误。