Python 3 |线程工作很奇怪
Python 3 | Threading works weirdly
我正在学习 python 3 并且我看了这个关于线程的教程:
我测试了示例代码,但出于某种原因,结果有点奇怪。
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 Messages" 和 "Receive 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
Send MessagesReceive Messages
谁能给我解释一下为什么结果是这样打印的?
感谢您提供的任何帮助!
当我 运行 你的代码片段时,我实际上得到了不同的结果。可能发生的情况是 CPU 在您发布的 运行 上按 "correct" 顺序安排所有线程,但如果您继续 运行 将产生不同的结果] 多次。这是正常的线程行为,因为 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 调度程序的工作(
a.k.a。短期调度程序 ) 到 select 另一个进程
就绪队列 运行 接下来。
就绪队列的存储结构和使用的算法
select下一个进程不一定是一个先进先出队列。有
多种方案可供选择,还有众多可调
每个算法的参数,这是本文的基本主题
整个章节。
我正在学习 python 3 并且我看了这个关于线程的教程:
我测试了示例代码,但出于某种原因,结果有点奇怪。
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 Messages" 和 "Receive 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
Send MessagesReceive Messages
谁能给我解释一下为什么结果是这样打印的? 感谢您提供的任何帮助!
当我 运行 你的代码片段时,我实际上得到了不同的结果。可能发生的情况是 CPU 在您发布的 运行 上按 "correct" 顺序安排所有线程,但如果您继续 运行 将产生不同的结果] 多次。这是正常的线程行为,因为 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 调度程序的工作( a.k.a。短期调度程序 ) 到 select 另一个进程 就绪队列 运行 接下来。
就绪队列的存储结构和使用的算法
select下一个进程不一定是一个先进先出队列。有
多种方案可供选择,还有众多可调
每个算法的参数,这是本文的基本主题
整个章节。