GIL (global interpreter lock)

昨日のアンケートに「GILを取り除く」という選択肢が追加されていた。GILが何なのかわからない人もいるだろうから簡単に説明しようと思ったけど

を読む方がいいかと思ったので紹介しておく。実例で説明すると「処理重たいなぁ。→そうだCPU2つあるから2つのスレッドでやったら2倍速いんじゃないか?→やってみる→あれ、片方しか使われていないぞ??」というのがありがちなはまりパターンかな。インタプリタ単位でロックがかかるので、ばりばり計算する処理を2つのスレッドでやっても2倍速くなるどころかスレッドの切り替えコストで逆に遅くなる。そういうことがやりたいならインタプリタを二つ起動する必要がある。もちろんI/O待ちがたくさんある場合は、待っている間ブロックせず他のスレッドが計算できるようにスレッドを使う価値はある。