<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Fremtidige l&#248;fter</title>
	<atom:link href="http://blog.kjempekjekt.com/2010/08/08/fremtidige-lfter/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.kjempekjekt.com/2010/08/08/fremtidige-lfter/</link>
	<description>om livet som .net utvikler</description>
	<lastBuildDate>Wed, 16 May 2012 21:05:45 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: Vidar</title>
		<link>http://blog.kjempekjekt.com/2010/08/08/fremtidige-lfter/#comment-102637</link>
		<dc:creator>Vidar</dc:creator>
		<pubDate>Mon, 09 Aug 2010 08:37:31 +0000</pubDate>
		<guid isPermaLink="false">http://blog.kjempekjekt.com/2010/08/08/fremtidige-lfter/#comment-102637</guid>
		<description>:) Glimdrende, den implementasjonen vil nok vere ein god del meir cpu-effektiv, siden tråden nå ikkje &quot;våkner&quot; opp kvart 10ms for å sjekke om den har fått noge data.
Men både med denne implementasjonen og den originale så må ein være bevisst at ein kan havne i ein deadlock-situasjon, der kode som venter på Promise blir ståande og vente i all evighet. Enten fordi ein har &quot;glemt&quot; å faktisk gi data til Promise, eller fordi ein av trådane har kasta ein exception før den fekk gitt ein verdi. Eg har hatt eit par sånne bugs og det som skjer er at hovedtråden bare står og spinner mens den venter på at alle trådane skal bli ferdig. Eg jobber med ein ganske massiv parallell kodebase nå, og har hatt eit par tilsvarende Heisenbugs. Heisenbugs fordi det er ikkje alltid trådane som skal sende ut verdi går i Exception. ;)</description>
		<content:encoded><![CDATA[<p>:) Glimdrende, den implementasjonen vil nok vere ein god del meir cpu-effektiv, siden tråden nå ikkje &#8220;våkner&#8221; opp kvart 10ms for å sjekke om den har fått noge data.<br />
Men både med denne implementasjonen og den originale så må ein være bevisst at ein kan havne i ein deadlock-situasjon, der kode som venter på Promise blir ståande og vente i all evighet. Enten fordi ein har &#8220;glemt&#8221; å faktisk gi data til Promise, eller fordi ein av trådane har kasta ein exception før den fekk gitt ein verdi. Eg har hatt eit par sånne bugs og det som skjer er at hovedtråden bare står og spinner mens den venter på at alle trådane skal bli ferdig. Eg jobber med ein ganske massiv parallell kodebase nå, og har hatt eit par tilsvarende Heisenbugs. Heisenbugs fordi det er ikkje alltid trådane som skal sende ut verdi går i Exception. ;)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Torbjørn</title>
		<link>http://blog.kjempekjekt.com/2010/08/08/fremtidige-lfter/#comment-102636</link>
		<dc:creator>Torbjørn</dc:creator>
		<pubDate>Mon, 09 Aug 2010 08:18:03 +0000</pubDate>
		<guid isPermaLink="false">http://blog.kjempekjekt.com/2010/08/08/fremtidige-lfter/#comment-102636</guid>
		<description>Takk, Vidar. Her er Promise&lt;T&gt; implementert med AutoResetEvent. Den fungerer nå litt anderledes, og kan gjenbrukes. Den forventer nå et kall til Deliver for hver gang man aksesserer Value. Vil du ha en versjon som &quot;leveres&quot; én gang men kan aksesseres mange ganger kan du kombinere implementasjonen av min orginale Promise&lt;T&gt; med denne. Kommer an på hvordan man forventer at den skal fungere..

&lt;tt&gt;&lt;pre&gt;
    public class Promise&lt;T&gt;
    {
        private T _value;
        private AutoResetEvent _delivered = new AutoResetEvent(false);
        public T Value
        {
            get
            {
                _delivered.WaitOne(); 
                return _value;
            }
        }
        public void Deliver(T value)
        {
            _value = value;
            _delivered.Set();
        }
    }
&lt;/pre&gt;&lt;/tt&gt;</description>
		<content:encoded><![CDATA[<p>Takk, Vidar. Her er Promise<t> implementert med AutoResetEvent. Den fungerer nå litt anderledes, og kan gjenbrukes. Den forventer nå et kall til Deliver for hver gang man aksesserer Value. Vil du ha en versjon som &#8220;leveres&#8221; én gang men kan aksesseres mange ganger kan du kombinere implementasjonen av min orginale Promise</t><t> med denne. Kommer an på hvordan man forventer at den skal fungere..</p>
<p><tt>
<pre>
    public class Promise<t>
    {
        private T _value;
        private AutoResetEvent _delivered = new AutoResetEvent(false);
        public T Value
        {
            get
            {
                _delivered.WaitOne();
                return _value;
            }
        }
        public void Deliver(T value)
        {
            _value = value;
            _delivered.Set();
        }
    }
</t></pre>
<p></tt></t></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anders Norås</title>
		<link>http://blog.kjempekjekt.com/2010/08/08/fremtidige-lfter/#comment-102633</link>
		<dc:creator>Anders Norås</dc:creator>
		<pubDate>Mon, 09 Aug 2010 06:56:23 +0000</pubDate>
		<guid isPermaLink="false">http://blog.kjempekjekt.com/2010/08/08/fremtidige-lfter/#comment-102633</guid>
		<description>Fin fin post Torbjørn.

Jeg tror den mest kjente implementasjonen av future-patternet på .NET-plattformen må være NHibernate.Futures, men også LINQs defered execution er en variant av dett. I en ORM er det massevis av sense i å benytte slike patterns, slik at rammeverket selv kan optimere spørring mm.

Jeg likte særlig godt at du benyttet delegates fremfor å gå den &quot;magiske&quot; AOP-veien med implementasjonen din. Ved å bruke delegates eksplisitt blir det lettere å lese koden og man vet at man ikke har noen garanti for at en delegate eksekveres umiddelbart dersom man har noen år med C# i ryggen.

Selvom Clojure-eksemplet, og mange andre eksempler man ser, fokuserer på multi-threading, har egentlig dette patternet lite å gjøre med multi-threading. Ta NH-eksemplet jeg refererte til. NH bruker futures for å &quot;lære&quot; mer om hva brukeren faktisk har til hensikt å gjøre slik at databasespørringene blir mer effektive. (Se linken over for kodeeksempeler).
Tenk også en eller annen form for aggregeringskode:

IProducer p = new Producer();
IFuture c = p.Count();
IFuture maxl = p.Max(x =&gt; x.Length);
p.Produce(strings);
Console.WriteLine(&quot;Actual count: &quot; + c.Value);
Console.WriteLine(&quot;Actual max length: &quot; + maxl.Value);

Her brukes futures for deklare antall og makslengde-aggregatorer før man jobber med data. Selve aggregeringen gjøres først når man leser av verdien. Dette er tilsavarende hvordan deferred execution i LINQ fungerer. Der kan man deklarere en spørring, men denne utføres ikke før man prøver å lese resultatet.</description>
		<content:encoded><![CDATA[<p>Fin fin post Torbjørn.</p>
<p>Jeg tror den mest kjente implementasjonen av future-patternet på .NET-plattformen må være NHibernate.Futures, men også LINQs defered execution er en variant av dett. I en ORM er det massevis av sense i å benytte slike patterns, slik at rammeverket selv kan optimere spørring mm.</p>
<p>Jeg likte særlig godt at du benyttet delegates fremfor å gå den &#8220;magiske&#8221; AOP-veien med implementasjonen din. Ved å bruke delegates eksplisitt blir det lettere å lese koden og man vet at man ikke har noen garanti for at en delegate eksekveres umiddelbart dersom man har noen år med C# i ryggen.</p>
<p>Selvom Clojure-eksemplet, og mange andre eksempler man ser, fokuserer på multi-threading, har egentlig dette patternet lite å gjøre med multi-threading. Ta NH-eksemplet jeg refererte til. NH bruker futures for å &#8220;lære&#8221; mer om hva brukeren faktisk har til hensikt å gjøre slik at databasespørringene blir mer effektive. (Se linken over for kodeeksempeler).<br />
Tenk også en eller annen form for aggregeringskode:</p>
<p>IProducer p = new Producer();<br />
IFuture c = p.Count();<br />
IFuture maxl = p.Max(x =&gt; x.Length);<br />
p.Produce(strings);<br />
Console.WriteLine(&#8220;Actual count: &#8221; + c.Value);<br />
Console.WriteLine(&#8220;Actual max length: &#8221; + maxl.Value);</p>
<p>Her brukes futures for deklare antall og makslengde-aggregatorer før man jobber med data. Selve aggregeringen gjøres først når man leser av verdien. Dette er tilsavarende hvordan deferred execution i LINQ fungerer. Der kan man deklarere en spørring, men denne utføres ikke før man prøver å lese resultatet.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Vidar</title>
		<link>http://blog.kjempekjekt.com/2010/08/08/fremtidige-lfter/#comment-102631</link>
		<dc:creator>Vidar</dc:creator>
		<pubDate>Mon, 09 Aug 2010 06:28:42 +0000</pubDate>
		<guid isPermaLink="false">http://blog.kjempekjekt.com/2010/08/08/fremtidige-lfter/#comment-102631</guid>
		<description>Tør eg foreslå å bruke http://msdn.microsoft.com/en-us/library/system.threading.autoresetevent.aspx istedet for while(..) sleep(). ;) Etter å ha oppdaga den prøver eg sjøl i mest mulig grad å bruke den istedet når eg lager parallell kode.

Når det gjelder Future så vil Async-cache gi deg noge av den samme funksjonaliteten, dog ikkje heilt samme, men eg anbefaler deg å ta ein kikk:
http://blogs.msdn.com/b/pfxteam/archive/2010/04/23/10001621.aspx

Og TPL + extensions extras e virkelig kult! ;)</description>
		<content:encoded><![CDATA[<p>Tør eg foreslå å bruke <a href="http://msdn.microsoft.com/en-us/library/system.threading.autoresetevent.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/system.threading.autoresetevent.aspx</a> istedet for while(..) sleep(). ;) Etter å ha oppdaga den prøver eg sjøl i mest mulig grad å bruke den istedet når eg lager parallell kode.</p>
<p>Når det gjelder Future så vil Async-cache gi deg noge av den samme funksjonaliteten, dog ikkje heilt samme, men eg anbefaler deg å ta ein kikk:<br />
<a href="http://blogs.msdn.com/b/pfxteam/archive/2010/04/23/10001621.aspx" rel="nofollow">http://blogs.msdn.com/b/pfxteam/archive/2010/04/23/10001621.aspx</a></p>
<p>Og TPL + extensions extras e virkelig kult! ;)</p>
]]></content:encoded>
	</item>
</channel>
</rss>

