[Ruby] Tk.mainloop ест 99% cpu
Vladimir V. Zdorovenco
halflife at moldova.cc
Fri Feb 7 15:16:37 MSK 2003
В письме от 7 Февраль 2003 14:48 Dmitry Morozhnikov написал:
> 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 так собстно и делает.
А я еще подумывал может в таких ситуациях следует создать отдельный,
настоящий, не Ruby тред. Пусть се работает, сообщая Ruby о результатах :)
> 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 в том что при нескольких
> процессах на него завязанных -- фиг различишь к чему пришедший
> сигнал относится.
Проблема в том или ином к одному сводится. Свой механизм тредов удобен для
Ruby программиста и в _некоторых случаях_ неудобен для того кто модули пишет.
--
Всего хорошего,
Владимир (e-mail: halflife at moldova doc cc)
Get your personal e-mail for FREE at http://www.moldovacc.com
More information about the Ruby
mailing list