Ruby 1.9 suppose to have native threads, and GIL is supposed to lift
if some threads enters native code (like GUI toolkit main loop or C
implementation of some Ruby lib). But if i start following simple code
sample that displays GUI in main thread and do some basic math in
separate thread - the GUI will hang out badly and dragging window will
redraw ~ every 10 seconds or so :(. I have checked with different GUI
toolkit, Qt (qtbindings gem) - it behaves exactly same. Tested with
Ruby 1.9.3-p0 on Windows 7 and OSX 10.7
require ‘tk’
require ‘thread’
require ‘rexml/document’
Thread.new { loop { a = 1 } }
TkRoot.new.mainloop()
Same code in Python works fine without any GUI hangs:
from Tkinter import *
from threading import *
class WorkThread( Thread ) :
def run( self ) :
while True :
a = 1
WorkThread().start()
Tk().mainloop()
What i’m doing wrong?