Python GIL

871 ワード

  • Pythonの1つのスレッドはC言語の1つのスレッド
  • に対応する.
  • GILは、同じ時点で1つのスレッドのみが1つのCPUコア上でバイトコードを実行するようにする.Pythonプロセスを1つ実行すれば、どのくらいのスレッドが入っていても、1つのCPUカーネルでしか実行できません.JAVA、Cなどは複数のスレッドを複数のCPUカーネルにマッピングすることができます.複数のスレッドを複数のCPUにマッピングすることができず、CPUマルチコアの優位性を体現することができず、同時に非常に制限されている
  • である.
    1つの時点でCPU上で実行されるスレッドは1つしかありません.マルチスレッドを作成するには、スレッド間の同期を考慮する必要はありませんか?
    この例を見てください.
    import threading
    
    total = 0
    
    def add():
        global total
        for i in range(1000000):
            total += 1
    
    def desc():
        global total
        for i in range(1000000):
            total -=1
    
    
    thread1 = threading.Thread(target=add)
    thread2 = threading.Thread(target=desc)
    thread1.start()
    thread2.start()
    
    thread1.join()
    thread2.join()
    
    print(total)
    

    totalの値は、実行するたびに異なり、GILがいつリリースされるかを示します.
    GILはいつリリースされますか?
  • GILは、実行するバイトコードの行数およびタイムスライスに基づいてGIL
  • を解放する.
  • IO操作に遭遇すると
  • が解放される