From: "mame (Yusuke Endoh)" Date: 2012-03-30T01:01:08+09:00 Subject: [ruby-dev:45456] [ruby-trunk - Feature #6082][Assigned] io_binwrite()内でwritev()を使う Issue #6082 has been updated by mame (Yusuke Endoh). Status changed from Open to Assigned Assignee set to nobu (Nobuyoshi Nakada) 分かってませんが挙動が変わるものでないなら取り込んじゃってよいのでは ないでしょうかね。何かの環境で問題起きたら revert で。 なかださんお願いします。 なんとなく kosaki さんあたり、もしコメントあったらどうぞ。 -- Yusuke Endoh ---------------------------------------- Feature #6082: io_binwrite()内でwritev()を使う https://bugs.ruby-lang.org/issues/6082#change-25388 Author: Glass_saga (Masaki Matsushita) Status: Assigned Priority: Normal Assignee: nobu (Nobuyoshi Nakada) Category: core Target version: io.cのio_binwrite()内で、writev()を用いる事を提案します。 現在のio_binwrite()は、実際にシステムコールを呼ぶ時には渡された文字列がwbufに収まるならばMEMMOVE()で収めてしまってio_fflush()し、 収まらなければfflushした後に再度rb_write_internal()を呼んでいますが、writev()を用いる事でMEMMOVE()の必要がなくなり、 wbufと渡された文字列を結合する事なく一度のシステムコールで書き出す事ができます。 また、wbufと渡された文字列を1度に書き出す事に成功すれば、他のスレッドからのwriteが間に入らないというメリットもあります。 patchを添付します。 test-allを実行したところ、test_keep_alive_EOF(TestNetHTTPKeepAlive)でfailure、test_inspect_nonascii(TestDir_M17N)でerrorとなりますが、 これはtrunkのr34799でも同様なので、このpatchによる問題ではないものと思われます。 -- http://bugs.ruby-lang.org/