代码之家  ›  专栏  ›  技术社区  ›  user7127000

每个响应输入的程序都有一个带有无限循环的主线程,这准确吗?

  •  3
  • user7127000  · 技术社区  · 7 年前

    我想知道,如果说每个响应程序的核心都有一条主线,比如

    while not quit
         if work to do
             do work
    

    示例:

    • HTTP侦听器/web服务器
    • 用户界面
    • 执行作业的服务

    我问题的另一种措辞:

    有没有可能创建一个程序,在有某种类型的刺激(例如鼠标点击、网络请求)之前,不执行线程?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Jim Mischel    7 年前

    轮询输入是(或应该是)例外,而不是规则。您的循环:

    while not quit
        if work to do
            do work
    

    是使处理器忙于轮询输入的忙等待。

    按照大多数程序的编写方式,循环略有修改:

    while not quit
        wait for input
        process input
    

    “等待输入”是一种非繁忙的等待。线程处于可警报的等待状态,这意味着它不消耗任何CPU资源。当线程订阅的事件发生时,该线程将被唤醒,以便它可以处理该事件。然后它又回去睡觉了。

    请注意,“处理事件”可能而且经常涉及到启动另一个线程。

    所以,是的:有可能创建一个程序,在没有某种类型的刺激之前,没有线程在执行。这是当今大多数应用程序的标准,包括HTTP侦听器、GUI应用程序和系统服务。