[prev in list] [next in list] [prev in thread] [next in thread] 

List:       e-lang
Subject:    Re: [e-lang] Techniques for batching messages
From:       "Dean Tribble" <tribble () e-dean ! com>
Date:       2006-11-18 3:00:28
Message-ID: 1f5af2f10611171900s51e3bd0fx1e28a5b61cab99e6 () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


This is an important pattern because it allows an event loop to merge calls
(e.g., redisplay events), suppress duplicates, etc.  Very nice.

On 11/17/06, Kevin Reid <kpreid@attglobal.net> wrote:
>
>
> # This will send at most one message per cycle of the vat.
>
> def buffer := <something mutable>
>
> def flush() {
>    recipient <- (buffer.snapshot())
>    buffer.removeAll()
> }
>
> def input(data) {
>    if (buffer.empty()) {
>      flush <- ()
>    }
>    buffer.append(data)
> }
>
>
> # This version will send a message only after one cycle with no input
> # being added.
>
> def buffer := <something mutable>
> var currentTag := null
>
> def flush(tag) {
>    if (tag == currentTag) {
>      recipient <- (buffer.snapshot())
>      buffer.removeAll()
>    }
> }
>
> def input(data) {
>    if (buffer.empty()) {
>      flush <- (currentTag := def aTag {})
>    }
>    buffer.append(data)
> }
>
>
>
> --
> Kevin Reid                            <http://homepage.mac.com/kpreid/>
>
>
> _______________________________________________
> e-lang mailing list
> e-lang@mail.eros-os.org
> http://www.eros-os.org/mailman/listinfo/e-lang
>

[Attachment #5 (text/html)]

This is an important pattern because it allows an event loop to merge calls (e.g., \
redisplay events), suppress duplicates, etc.&nbsp; Very nice.<br><br><div><span \
class="gmail_quote">On 11/17/06, <b class="gmail_sendername">Kevin Reid </b> &lt;<a \
href="mailto:kpreid@attglobal.net">kpreid@attglobal.net</a>&gt; \
wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, \
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br> # This will send at \
most one message per cycle of the vat.<br><br>def buffer := &lt;something \
mutable&gt;<br><br>def flush() {<br>&nbsp;&nbsp; recipient &lt;- \
(buffer.snapshot())<br>&nbsp;&nbsp; buffer.removeAll()<br>}<br><br>def input(data) { \
<br>&nbsp;&nbsp; if (buffer.empty()) {<br>&nbsp;&nbsp;&nbsp;&nbsp; flush &lt;- \
()<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; buffer.append(data)<br>}<br><br><br># This \
version will send a message only after one cycle with no input<br># being \
added.<br><br>def buffer := &lt;something mutable&gt; <br>var currentTag := \
null<br><br>def flush(tag) {<br>&nbsp;&nbsp; if (tag == currentTag) \
{<br>&nbsp;&nbsp;&nbsp;&nbsp; recipient &lt;- \
(buffer.snapshot())<br>&nbsp;&nbsp;&nbsp;&nbsp; buffer.removeAll()<br>&nbsp;&nbsp; \
}<br>}<br><br>def input(data) {<br>&nbsp;&nbsp; if (buffer.empty()) {<br> \
&nbsp;&nbsp;&nbsp;&nbsp; flush &lt;- (currentTag := def aTag {})<br>&nbsp;&nbsp; \
}<br>&nbsp;&nbsp; buffer.append(data)<br>}<br><br><br><br>--<br>Kevin \
Reid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs \
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;<a \
href="http://homepage.mac.com/kpreid/">http://homepage.mac.com/kpreid/</a> \
&gt;<br><br><br>_______________________________________________<br>e-lang mailing \
list<br><a href="mailto:e-lang@mail.eros-os.org">e-lang@mail.eros-os.org</a><br><a \
href="http://www.eros-os.org/mailman/listinfo/e-lang">http://www.eros-os.org/mailman/listinfo/e-lang
 </a><br></blockquote></div><br>



_______________________________________________
e-lang mailing list
e-lang@mail.eros-os.org
http://www.eros-os.org/mailman/listinfo/e-lang


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic