[#7785] rb2c — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

28 messages 1999/09/02

[#7845] [Q] irb and SizedQueue — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

14 messages 1999/09/15

[ruby-dev:7840] socket and buffering

From: Masaki Fukushima <fukusima@...>
Date: 1999-09-13 14:09:55 UTC
List: ruby-dev #7840
福嶋です。

gtkとsocketの問題を調べていて気づいたんですが、ruby の socket か
らの読み込みって、全くバッファリングされないんですね。

したがって、sysread以外の入力メソッドを使うと全部 1 byte ずつ
read システムコールが発行されてしまうと。
stdioを経由で、ブロックせずに読み込むにはそれしかないからだと思い
ますけど。

これって、socketを使ったスクリプトの性能に結構影響あると思うんで
すが、「必要ならsysreadを使いなさい」ということは周知されているん
でしょうか?

特にネットワークがボトルネックでない場合(LANやlocalhost)に影響が
顕著であるように思います。

例えば ftplib を使って大きなファイルをgetすると、localhostからで
もかなり遅くなってしまいます。
# もっとも、これは ftplib を sysread を使うように改良すれば回避で
# きますが。


あと、Socket#read (IOから継承) を使うと fread の所でインタプリタ
が止ってしまうことがありませんか?

例えば 1 バイトだけデータが到着しているソケットに aSocket.read(2)
とかやると、fread で 2byte 読み込もうとしてブロックしてしまいます。

---
福嶋正機

In This Thread

Prev Next