[Ruby] Tk.mainloop ест 99% cpu
Dmitry Morozhnikov
dmiceman at mail.ru
Fri Feb 7 14:48:19 MSK 2003
On Fri, 7 Feb 2003, Vladimir V. Zdorovenco wrote:
ага. в ситуацию я впилился.
??>> ээ.. я не разбираюсь во внутренностях tcltk и потому просто не
VVZ> Вобщем я тоже не очень-то, просто представил себе ситуацию когда
VVZ> человек для которого ты чет там сделал скажет - "Как же это !?!
VVZ> Я видел программы и похлеще, им и 10% моего пупер-мега 100
VVZ> гигагерцового прцессора хватало а тут твоё чудо все 100%
VVZ> слопалло!!" :) Наврядли ты отверетешся сказав - "Тут Супер
VVZ> технология - Ruby/Tk!!"
:-) ну никто не спрорит -- бардак конечно.
VVZ> Вот и съедает схожий цикл Tk.mainloop все сто, там нет задержек
VVZ> он просто все время крутится проверяя что Tcl_DoOneEvent сделал.
VVZ> Если ничего не сделал увеличивает свой счетчик на интервал
VVZ> безделия если делает на другой, в конечном итоге если тот прев
VVZ> ысит свою норму выставленную заранне, управление передается
VVZ> другому треду.
но теперь я не понимаю как от этой проблемы можно избавиться со
стороны расширения. то есть я вижу здесь три возможности:
1. использовать ruby-евский io-диспетчер для tk-шных нужд. там
например есть такой rb_thread_wait_fd() на который можно повесить
X-совый сокет. кажется больше ведь для событий в tk источников
нет? другое дело -- как быть с виндой и маком? там ведь не
сокеты..
2. глобальное. отказаться от зеленых ниток нафиг.
3. паллиатив. висеть на tk-шном селекте до посинения в случае
если ниток нет. vwait fake_variable так собстно и делает.
VVZ> Вот хороший вопрос, и код Poll по ссылке:
VVZ> http://lists.ruby-support.org/lists/pipermail/ruby-developers/
VVZ> 2002-October/000058.html
VVZ> а вот хороший на него ответ:
VVZ> http://lists.ruby-support.org/lists/pipermail/ruby-developers/
VVZ> 2002-October/000059.html
насколько я понимаю, проблема с SIGIO в том что при нескольких
процессах на него завязанных -- фиг различишь к чему пришедший
сигнал относится.
--
DM, Dmitry Morozhnikov, PGPKEY 0xB6C14D95
More information about the Ruby
mailing list