Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Need advice for a mobile application server
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Basile Starynkevitch <basile.starynkevitch@i...>
Subject: Re: [Caml-list] Need advice for a mobile application server
On Thu, Nov 20, 2003 at 02:08:06PM +0200, Eray Ozkural wrote:

Eray> On Thursday 20 November 2003 11:27, Xavier Leroy wrote: [...]

Xavier>> Back to the original question: writing a multithreaded server in OCaml
Xavier>> is definitely feasible.  The only limitation to be aware of is that
Xavier>> OCaml threads do not offer parallelism, just concurrent execution.
Xavier>> What this means is that if there are several processors on your
Xavier>> machine, only one can execute OCaml code at any time, but other
Xavier>> threads (and therefore possibly other processors) can do I/O or C
Xavier>> computations in parallel.


Eray> I couldn't quite figure out why only one proc. can execute ocaml
Eray> code yet, but I can dig into the documentation :)

Mostly, because of the garbage collector. The Ocaml GC is very
efficient, and writing a generational [half-] copying *multi-threaded*
GC is quite difficult (as usual, the devil is in the
details). Actually, coding an efficient multithreaded GC with write
barriers using Posix threads is very tricky (if not impossible,
notably for synchronising minor GCs on every thread.) - for example
you'll probably need to access thread local storage on each
allocation, which (in portable C code) means calling
pthread_getspecific every time.


Regarding multi-threading in Ocaml, I think that it is much less
useful in Ocaml than say in Java or C. In my experience (on my
previous job) I started to code a multi-threaded application (the
POESIA monitor), and prefered to switch to a single-threaded design,
taking into advantage the functional abilities of Ocaml (i.e. mentally
replacing threads by sets of small correlated tasks, each represented
as functional values, ie closures, which means coding in a
continuation passing style). For instance the Unixqueue library (from
the Equeue software, used with Netclient) is single-threaded but very
useful to handle several "concurrent" communication channels
-e.g. HTTP or RSH connections.

Regards.
-- 
Basile STARYNKEVITCH -- basile dot starynkevitch at inria dot fr
Project cristal.inria.fr - phone +33 1 3963 5197 - mobile 6 8501 2359
http://cristal.inria.fr/~starynke --- all opinions are only mine 

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners