gpt4 book ai didi

python-3.x - python 3 |线程工作奇怪

转载 作者:行者123 更新时间:2023-12-01 03:31:04 24 4
gpt4 key购买 nike

我正在学习 python 3,我看了这个关于线程的教程:

https://www.youtube.com/watch?v=WaXK8G1hb_Q&index=33&list=PL6gx4Cwl9DGAcbMi1sH6oAMk4JHw91mC_#t=365.299172

我测试了示例代码,但由于某种原因,结果有点奇怪。

import threading

class Messenger(threading.Thread):
def run(self):
for _ in range(10):
print(threading.currentThread().getName())


m1 = Messenger(name="Send Messages")
m2 = Messenger(name="Receive Messages")
m1.start()
m2.start()

我期待程序以某种随机顺序打印出“发送消息”和“接收消息”,但这是发生了什么,我不太确定为什么:
Send MessagesReceive Messages

Send MessagesReceive Messages

Send MessagesReceive Messages

Send MessagesReceive Messages

Send MessagesReceive Messages

Send MessagesReceive Messages

Send MessagesReceive Messages

Send MessagesReceive Messages

Send MessagesReceive Messages

Send MessagesReceive Messages

有人可以向我解释为什么以这种方式打印结果吗?
感谢您提供的任何帮助!

最佳答案

当我运行你的代码片段时,我实际上得到了不同的结果。可能发生的情况是 CPU 在您发布的运行中以“正确”的顺序调度所有线程,但如果您继续多次运行它会产生不同的结果。这是正常的线程行为,因为 CPU 基本上决定每个进程何时开始运行。

我还会确保您正在运行您发布的确切代码,因为我的输出由换行符分隔,而您的似乎不是。

Send Messages
Send Messages
Receive Messages
Send Messages
Send Messages
Send Messages
Send Messages
Receive Messages
Receive Messages
Send Messages
Receive Messages
Send Messages
Receive Messages
Send Messages
Receive Messages
Send Messages
Receive Messages
Receive Messages
Receive Messages
Receive Messages

运行此代码:
import threading

class Messenger(threading.Thread):
def run(self):
for _ in range(10):
print(threading.currentThread().getName())


m1 = Messenger(name="Send Messages")
m2 = Messenger(name="Receive Messages")
m1.start()
m2.start()

如果你想阅读更多:

https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/5_CPU_Scheduling.html

重要的部分是关于 CPU 调度程序的部分:
  • 每当 CPU 空闲时,它就是 CPU 调度程序的工作(
    又名短期调度程序)从
    准备好接下来运行的队列。
  • 就绪队列的存储结构和算法
    select下一个进程不一定是FIFO队列。有
    几种可供选择的选择,以及众多可调
    每个算法的参数,这是本文的基本主题
    整章。
  • 关于python-3.x - python 3 |线程工作奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37501054/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com