dmd-concurrency

Chris Williams yoreanon-chrisw at yahoo.co.jp
Fri Nov 22 15:14:44 PST 2013


On Friday, 22 November 2013 at 22:35:47 UTC, Shammah Chancellor 
wrote:
> On 2013-11-22 22:34:19 +0000, Shammah Chancellor said:
> 
> Edit, I see that you have receiveAll.. I didn't notice that.  
> However, that still doesn't satisfy the problem when you want 
> to do receive() for your Tid, and receiveAll() from your 
> channels.

receiveAll() could pull from the thread's personal message box as 
well as all of its subscribed channels, so that it truly was a 
"receive ALL".

My thoughts for reasons to avoid that, however, are:

1. Threads always have their own message box allocated - even if 
it's empty - whereas with channels, at most you only have as many 
message boxes as you subscribed to. So my thinking was that if 
people are unlikely to mix channels-based systems and 
direct-sends in the same application, then every call to 
receiveAll() is having to spend an extra cycle checking the 
direct-send message box.

2. Since a Channel is just an interface, the implementation of 
which can vary, anyone who wanted to implement a 
NetworkedDuplicateChannel() class would be able to do so and pass 
it into a module that only includes std.concurency. This allows 
the actual implementation of any given channel to behave 
completely different from one another and quickly port code from 
one type to the other. send()/receive() are just innate to 
threads, however, and can't be replaced except by changing the 
import in each file to something else. Knowing that and also 
knowing that any direct-messaging system would probably be built 
like a channel (so that it had a constructor/init function where 
an IP and port could be configured, and perhaps an explicit 
startListening() method to call), I don't see anyone trying to 
override send()/receive() as their method for receiving direct 
messages over the network. They would still use the Channel 
interface, so there's not much value in trying to tie the two 
together.


More information about the Digitalmars-d mailing list