2016-05-28 4 views
4

私は、Python 3を学んだし、私はスレッドについて、このチュートリアルを見て: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 

結果がこのように印刷された理由を誰かに説明できますか? 何か助けてくれてありがとう!

+0

Python 3を実行していることは間違いありませんか? Python 3.4でサンプルコードを実行したところ、以下のような結果が得られましたが、Python 2.7を使用した場合、上記のようないくつかの行がありました。また、この質問を参照してください:http://stackoverflow.com/q/7687862/3820658。 – jb326

答えて

2

コードスニペットを実行したときに実際に結果が変わってしまいました。起こっている可能性のある状況は、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スケジューラ( a.k.a.短期スケジューラ)が、次のプロセスを実行する準備完了キューから別のプロセスを選択することがあります。

  • レディキューとアルゴリズムの記憶構造
    を選択すると、必ずしもFIFOキューである必要はありません。
    いくつかの選択肢から選択することができますが、
    チャプター全体の基本的な主題であるアルゴリズムごとに多数の調整可能な数多くの調整可能なパラメータ(
    )が各アルゴリズムに用意されています。

関連する問題