[Ruby] thread or process
Vladimir Shahov
v.shahov at sam-solutions.net
Wed May 7 12:35:08 MSD 2003
On Mon, May 05, 2003 at 10:20:10PM +0400, Vladimir Zdorovenco wrote:
> >>>>> "vic" == vic ismakaev <vic> writes:
>
> vic> Приветствую! Возник концептуальный вопрос у меня: под
> vic> линуксом треды действительно являются полноценными тредами в
> vic> рамках ОС,или они изолированы в рамках интрепретатора руби?
>
> Полноценные треды в рамках Ruby.
Следует читать как "изолированы в рамках интерпретатора". )
Наши дорогие полноценные треды в рамках Ruby блокируются все вместе на раз-два, если в
одном из них вызван syscall, ушедший надолго в пространство ядра.
Ибо (с точки зрения ОС) интерпретатор Ruby - это 1 процесс/поток и
блокировка идет целиком.
Пример из жизни, переброска данных туда-сюда между сокетами.
На каждое соединение порождается отдельный поток
<!-- начало цитаты -->
server_io=server.to_io
client_io=client.to_io
fdset=[client_io,socket_io]
loop {
result=select(fdset) #timeout for later config
next if result==nil
# if data present in one of sockets
result[0].each { |sockObject|
case sockObject
when client_io
content=client.sysread(1024)
server.syswrite(content)
when server_io
content=server.sysread(1024)
client.syswrite(content)
end
} #each
} #loop
<!-- конец цитаты -->
server - SSLSocket, client - TCPSocket
так вот, при попытке передать некую пока еще не опознанную
последовательность двоичных данных, server.syswrite вешает намертво всю
программу. До таймаута (через час гдето). Системный вызов write(2)
произведенный в недрах библиотеки ruby-openssl-0.1.3 не возвращает
значения. ОС блокирует выполнение .
ruby 1.8.0-pre2
Debian GNU/Linux
>
> vic> И насколько эффективнее использовать треды,а не порождать
> vic> новые процессы.
>
> От задачи зависит. Но, но второе поможет избежать неприятностей
> с select, poll подобными функциями, может еще чего. Также никто не
> мешает использовать отдельные процэссы там где ruby треды неподходят.
Kernel#select знаю, Kernel#poll - не знаю
--
Vladimir Shahov, icq 78193930
More information about the Ruby
mailing list