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

使用线程模块时,Python何时在线程之间切换?

  •  0
  • Butters  · 技术社区  · 2 年前

    以下是我的理解(如果我错了,请纠正我):Python在特定的时间间隔内在线程之间切换。此外,当等待I/O操作时,Python会释放GIL,以便可以处理另一个线程。

    以下是我不明白的地方:

    • 线程之间切换的时间间隔是如何确定的?
    • Python如何知道线程正在等待I/O操作?(像请求这样的一些库不适用于asyncio,但当使用线程时,Python不知何故知道它们何时在等待I/O)
    • 如果Python能够以某种方式自行确定是否在等待I/O,为什么会有人使用asyncio?
    1 回复  |  直到 2 年前
        1
  •  1
  •   Solomon Slow    2 年前

    蟒蛇 不切换线程。Python使用本机线程,这意味着由操作系统决定何时“切换”

    线程之间切换的时间间隔是如何确定的?

    这取决于程序运行的操作系统,也可能取决于 "scheduling policy" 对过程有效。

    Python如何知道线程正在等待I/O操作?

    操作系统知道线程正在等待I/O,因为该线程进行了I/O系统调用,而完成操作是操作系统的工作。

    Python潜在 能够 因为线程调用了一些实际进行系统调用的Python I/O函数。

    如果Python能够以某种方式自行确定是否在等待I/O,为什么会有人使用asyncio?

    我自己没有用过“异步”,我一直是一个老派线程,但这可能是品味的问题。“异步”和“线程”是两种不同的并发模型。无论你更熟悉哪一个,都可能是你要使用的,直到你的一个同事说服你尝试另一个。