[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