What would you do...

Manu turkeyman at gmail.com
Thu Dec 8 07:51:33 PST 2011


On 8 December 2011 16:27, Jens Mueller <jens.k.mueller at gmx.de> wrote:

> Manu wrote:
> > On 8 December 2011 00:20, Manu <turkeyman at gmail.com> wrote:
> >
> > > Hey peoples,
> > >
> > > So this might be a bit off topic... but I'm trying to think about the
> best
> > > way to write a small program in the most D-ish way possible (just to
> make
> > > sure I'm giving myself the most realistic experience with the
> language),
> > > and I wanted to get some thoughts.
> > > I don't know which way to go on this. I know what I'd do in various
> other
> > > languages, but I'm curious to hear the communities opinion. I think
> part of
> > > the problem is that D's networking libraries are pretty incomplete...
> but
> > > here it is anyway.
> > >
> > > I basically just want to write a trivial echo server which may have
> > > hundreds of thousands of connections split into small groups, and
> whenever
> > > data is received from a member in any group, it is basically echoed to
> the
> > > others in that group.
> > > Sounds super simple...
> > >
> > > My instinct is to have a listener on the main thread, and spawn a
> thread
> > > per group, each blocking on a select().. I think the questions is
> around
> > > thread safety and group management (managing the connection list for
> each
> > > group), and how to interrupt a blocking select() when a new connection
> has
> > > entered the group...
> > > "The D way" to solve these questions is a mystery to me. I just feel
> like
> > > I'm writing C code, manually managing thread safety, timeout logic. I
> feel
> > > like D offers some fundamental features that should make solving this
> > > problem a whole lot simpler that I must be completely missing...
> > >
> > > So, in a few sentences... simple problem, what would you do?
> > >
> >
> > Nobody at all? :(
> >
> > Quite seriously. I'm trying to work out how D's threading/thread safety
> > architecture can help me here.. Also since there's no collections, I'm
> > using the associative arrays. How do I manage thread safety when
> accessing
> > those? Is there a generic lock mechanism that I've missed along the way
> > without manually creating semaphores? Networking does seem to be pretty
> > bare, I'm basically writing C sockets code.
> > One of the results of my experiment here is to identify some critical
> > things that appear to be missing from the language. Places libraries
> should
> > really step in and make the task simple. This is a super simple network
> > app, but so far, it's just as complicated as if it were written in C.
>
> I'm probably wrong or not getting it.
> But to me it seems you have two different things:
> First threads and second connections. For the first I would give
> std.concurrency a try (message passing between the threads). And
> managing a set of connections within a thread is plain C. So using
> select as you do is probably good. If you need to adjust the select call
> from time to time you should not let select block indefinitely. Use a
> timeout. Another option is pselect which has a signal mask. I suppose
> this can also be used to signal abort.
>
> Jens
>

This is basically exactly what I have (although I'm using core.thread, I'll
swap it for std.concurrency, it does look nicer). But it just feels... lame*
.*
I'm not sure why though, I can't quite put my finger on it. Maybe something
irks me about using select() this way, it feels, 1980s :P

The std.concurrency documentation is pretty bad.
So is std.concurrency.spawn() just effectively a helper for spawning a
thread that has mailbox support?
std.concurrency.receive() has no documentation ;) .. Blocking/Non-blocking?
Should I use the one with duration==0 to do a poll? Perhaps there should be
an explicit poll() method?
What is prioritySend()? (also undocumented)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20111208/a6676fde/attachment-0001.html>


More information about the Digitalmars-d mailing list