<br><br><div class="gmail_quote">On Sat, May 12, 2012 at 6:48 PM, Aleksey Shipilev <span dir="ltr"><<a href="mailto:aleksey.shipilev@gmail.com" target="_blank">aleksey.shipilev@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Yes, that is why I have general issue with solving this problem with<br>
map-queue designs. Why would one mess with shared state, instantiate<br>
queues per striped object, when tasks can just be multiplexed over<br>
single-threaded executors? OP did not forced the constraint for the<br>
tasks to be executed in a batch, there's only the constraint for<br>
same-class tasks to be executed in order. That is why I believe<br>
stateless design is better: it is much more fool-proof and as<br>
efficient. Is there something I miss there?<br></blockquote><div><br></div><div>A consistent-hashing approach as you described is a good one as well, the problem is that when the stripes are unevenly distributed you end up with a single threaded program.</div>
<div><br></div><div>Cheers,</div><div>√</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class="HOEnZb"><font color="#888888"><br>
-Aleksey.<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On Sat, May 12, 2012 at 8:43 PM, √iktor Ҡlang <<a href="mailto:viktor.klang@gmail.com">viktor.klang@gmail.com</a>> wrote:<br>
> And removing the ExecutionStripe as soon as it's done with existing<br>
> runnables might be a bad idea, and as soon as you involve a temporal aspect<br>
> like, fade to black after 10 seconds of idleness, you need to have a timer<br>
> running. An alternative is to try out Weak/Soft references, but that ain't a<br>
> walk in the park either...<br>
><br>
> I apologize for the monologue, carry on....<br>
><br>
> Cheers,<br>
> √<br>
><br>
><br>
> On Sat, May 12, 2012 at 4:05 PM, √iktor Ҡlang <<a href="mailto:viktor.klang@gmail.com">viktor.klang@gmail.com</a>><br>
> wrote:<br>
>><br>
>> Also, if you know when a stripe won't be used anymore, you can simply<br>
>> disassociate the stripe, and it will finish the tasks it was scheduled to<br>
>> run prior to becoming garbage collected.<br>
>><br>
>><br>
>> On Sat, May 12, 2012 at 3:23 PM, √iktor Ҡlang <<a href="mailto:viktor.klang@gmail.com">viktor.klang@gmail.com</a>><br>
>> wrote:<br>
>>><br>
>>><br>
>>><br>
>>> On Sat, May 12, 2012 at 2:47 PM, Aleksey Shipilev<br>
>>> <<a href="mailto:aleksey.shipilev@gmail.com">aleksey.shipilev@gmail.com</a>> wrote:<br>
>>>><br>
>>>> You seem to have pretty generic approach for making arbitrary executor<br>
>>>> look like striped one. I would be naturally to assume the number of<br>
>>>> stripes is arbitrary as well. ;) The race-free purges in these<br>
>>>> MultiMap-like cases is rather hard for inexperienced concurrency guys;<br>
>>>> much harder than writing the baseline map-queue-based implementation.<br>
>>>> That's why I think suggesting the baseline map-queue-based<br>
>>>> implementation and asking to fit purges there is like selling someone<br>
>>>> the house with a minefield in the yard.<br>
>>>><br>
>>><br>
>>> Shared mutable state concurrency IS a minefield. If you operate at that<br>
>>> level you need to learn how to disarm mines.<br>
>>> That's why I prefer to offer people things like composable futures and<br>
>>> actors instead of shared mutable state concurrency.<br>
>>><br>
>>> Cheers,<br>
>>> √<br>
>>><br>
>>>><br>
>>>> -Aleksey.<br>
>>>><br>
>>>> On Sat, May 12, 2012 at 4:35 PM, √iktor Ҡlang <<a href="mailto:viktor.klang@gmail.com">viktor.klang@gmail.com</a>><br>
>>>> wrote:<br>
>>>> > It'll only be an issue if you have arbitrary stripes. Fixing that is a<br>
>>>> > great<br>
>>>> > exercise to the reader!<br>
>>>> ><br>
>>>> > Cheers,<br>
>>>> > V<br>
>>>> ><br>
>>>> > On May 12, 2012 1:55 PM, "Aleksey Shipilev"<br>
>>>> > <<a href="mailto:aleksey.shipilev@gmail.com">aleksey.shipilev@gmail.com</a>><br>
>>>> > wrote:<br>
>>>> >><br>
>>>> >> On Sat, May 12, 2012 at 2:09 PM, √iktor Ҡlang<br>
>>>> >> <<a href="mailto:viktor.klang@gmail.com">viktor.klang@gmail.com</a>><br>
>>>> >> wrote:<br>
>>>> >> > Here's an implementation I threw together (haven't been tested yet<br>
>>>> >> > so<br>
>>>> >> > YMMV)<br>
>>>> >> > that should make any Executor into a striped one, for every<br>
>>>> >> > runnable<br>
>>>> >> > that is<br>
>>>> >> > put in there which is Striped.<br>
>>>> >> ><br>
>>>> >> > <a href="https://gist.github.com/2665603" target="_blank">https://gist.github.com/2665603</a><br>
>>>> >><br>
>>>> >> Neat trick, but it is prone to memory leaks. You will have to protect<br>
>>>> >> yourself from multiple stripe classes come and go, that is, there is<br>
>>>> >> a<br>
>>>> >> garbage buildup in $stripes map, if some stripes are not being used<br>
>>>> >> (from some point, forever). Getting that right in race-free manner is<br>
>>>> >> tough.<br>
>>>> >><br>
>>>> >> -Aleksey.<br>
>>><br>
>>><br>
>>><br>
>>><br>
>>> --<br>
>>> Viktor Klang<br>
>>><br>
>>> Akka Tech Lead<br>
>>> Typesafe - The software stack for applications that scale<br>
>>><br>
>>> Twitter: @viktorklang<br>
>>><br>
>><br>
>><br>
>><br>
>> --<br>
>> Viktor Klang<br>
>><br>
>> Akka Tech Lead<br>
>> Typesafe - The software stack for applications that scale<br>
>><br>
>> Twitter: @viktorklang<br>
>><br>
><br>
><br>
><br>
> --<br>
> Viktor Klang<br>
><br>
> Akka Tech Lead<br>
> Typesafe - The software stack for applications that scale<br>
><br>
> Twitter: @viktorklang<br>
><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><span style="border-collapse:separate;color:rgb(0,0,0);font-family:Times;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:-webkit-auto;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium"><span style="font-family:arial;font-size:small"><span style="border-collapse:collapse;font-family:arial,sans-serif;font-size:13px">Viktor Klang<br>
<br>Akka Tech Lead</span><div><font face="arial, sans-serif"><span style="border-collapse:collapse"><a href="http://www.typesafe.com/" target="_blank">Typesafe</a><span> </span>- </span></font><span>The software stack for applications that scale</span><br>
<font face="arial, sans-serif"><span style="border-collapse:collapse"><br></span></font><font face="arial, sans-serif"><span style="border-collapse:collapse">Twitter: @viktorklang</span></font></div></span></span><br>