最近在研究Python的thread programing. 但是發現都在同一顆CPU上面跑. 覺得有點奇怪. 最後找到原因. 原來是GIL的限制.

The expectation is that on a multi-core machine a multithreaded code should make use of these extra cores and thus increase overall performance. Unfortunately the internals of the main Python interpreter, CPython, negate the possibility of true multi-threading due to a process known as the Global Interpreter Lock (GIL).

Threading Library


那根據上面的定義. 那muti-thread在python上有什麼benefit呢? 答案是看你的應用案例. 如果你的程式是I/O bound 的case話, 那muti-thread還是有用的. 舉例例來說你的程式可能需要呼叫一個https的api. 那CPU處理的速度一定遠大於API處理的速度. 這時候你可以呼叫thread來解決等待API處理速度的問題. 可以讓單一顆CPU的utilization盡可能的提高.
但是如果你的程式是CPU bound 的case話, 那在Python中的muti-thread可能對你就沒啥用處.

Multiprocessing Library


如果在Python中要使用多個CPU core的話, 你可能需要使用Multiprocessing library. 其實簡單的來說就是執行兩個python程式啦!

Reference