From: Yaron Minsky <yminsky@gmail.com>
To: Caml Mailing List <caml-list@inria.fr>
Subject: Efficient I/O with threads
Date: Tue, 24 May 2005 18:14:45 -0400 [thread overview]
Message-ID: <891bd33905052415145bb1818f@mail.gmail.com> (raw)
We've been running into some interesting problems building highly
efficient I/O routines in threaded code in ocaml, and I'm curious if
anyone else has some thoughts on this. The basic problem seems to be
that the locking and unlocking of the IO channels seems to take a
large fraction of the execution time.
A little bit of background first. The data type we're outputting is
basically a simple s-expression, with the following type:
type sexp = Atom of string | List of sexp list
We write out an s-expression by writing a tag-byte to determine
whether the s-expression is an atom or a string. If the s-expression
is an atom, we then write a 4-byte int, which is the length of the
string, and then the string. If the s-expression is a list, we write
an atom which is the number of s-expression that are contained, and
then write those s-expressions.
It's very easy to write parsing and marshalling for this type of wire
protocol, but that code turns out to be quite inefficient, because you
end up making too many calls to the input and output functions, and
each one of those calls requires releasing and acquiring locks. I
just can't think of a clean way of implementing a reader for this kind
of protocol. (a writer could be done by writing stuff to a buffer
first, and then writing the whole buffer out at the socket at once.)
Any thoughts?
Yaron
next reply other threads:[~2005-05-24 22:14 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-05-24 22:14 Yaron Minsky [this message]
2005-05-25 1:42 ` Yaron Minsky
2005-05-25 2:12 ` [Caml-list] " Nicolas Cannasse
2005-05-25 10:24 ` Gerd Stolpmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=891bd33905052415145bb1818f@mail.gmail.com \
--to=yminsky@gmail.com \
--cc=caml-list@inria.fr \
--cc=yminsky@cs.cornell.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox