<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>multithreading &#8211; Smals Research</title>
	<atom:link href="https://www.smalsresearch.be/tag/multithreading/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.smalsresearch.be</link>
	<description></description>
	<lastBuildDate>Thu, 09 Apr 2026 12:04:17 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.smalsresearch.be/wp-content/uploads/2026/01/cropped-cropped-Smals_Research-32x32.png</url>
	<title>multithreading &#8211; Smals Research</title>
	<link>https://www.smalsresearch.be</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Reactive: het Akka framework</title>
		<link>https://www.smalsresearch.be/reactive-het-akka-framework/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Tue, 07 Sep 2021 11:59:31 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[akka]]></category>
		<category><![CDATA[aktors]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[multithreading]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[reactive]]></category>
		<category><![CDATA[Resilience]]></category>
		<category><![CDATA[Software architectures]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">/?p=16446</guid>

					<description><![CDATA[In een vorige blog gaven we reeds een uitvoerige inleiding van het &#8220;Reactive&#8221; paradigma. Vermits dit toch wel een belangrijke en invloedrijke zaak geworden is binnen de developer wereld, lijkt het ons nuttig om hier op terug te komen en wat dieper in te gaan op een voorbeeld van een Reactive framework: het Akka framework, [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image"><figure class="alignleft is-resized"><img decoding="async" src="/wp-content/uploads/2021/09/reactive2-edited-1.png" alt="" class="wp-image-16466" width="150" height="150" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/09/reactive2-edited-1.png 155w, https://www.smalsresearch.be/wp-content/uploads/2021/09/reactive2-edited-1-150x150.png 150w" sizes="(max-width: 150px) 100vw, 150px" /></figure></div>



<p class="justify-text">In een <a href="/de-reactive-hype/" data-type="post" data-id="14280">vorige blog</a> gaven we reeds een uitvoerige inleiding van het &#8220;Reactive&#8221; paradigma. Vermits dit toch wel een belangrijke en invloedrijke zaak geworden is binnen de developer wereld, lijkt het ons nuttig om hier op terug te komen en wat dieper in te gaan op een voorbeeld van een Reactive framework: het <em>Akka framework</em>, één van de pioniers binnen de Reactive beweging.</p>



<span id="more-16446"></span>



<h2 class="wp-block-heading">Wat is Reactive alweer?</h2>



<p class="justify-text"><a href="https://www.reactivemanifesto.org/">Reactieve systemen</a> worden gezien als één van de belangrijkste ontwikkelingen om systemen responsiever te maken voor meer veeleisende eindgebruikers, en om overweg te kunnen met de grote hoeveelheid data die moderne systemen overspoelt. Zogenaamde &#8220;wearables&#8221; en andere <a href="/er-zit-een-hacker-in-mijn-diepvries/" data-type="post" data-id="6757">IoT zaken</a> kunnen bijvoorbeeld een constante stroom aan data genereren. Wanneer men dan de data van vele honderden van zulke devices moet verwerken, komen traditionele systemen vaak in de problemen. Maar ook voor &#8216;gewone&#8217; toepassingen kan deze technologie heil brengen, doordat de responsiviteit en resiliëntie ook kunnen worden verhoogd.</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2021/09/Reactive-Manifesto.png"><img fetchpriority="high" decoding="async" width="1024" height="416" src="/wp-content/uploads/2021/09/Reactive-Manifesto-1024x416.png" alt="" class="wp-image-16462" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/09/Reactive-Manifesto-1024x416.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2021/09/Reactive-Manifesto-300x122.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/09/Reactive-Manifesto-768x312.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/09/Reactive-Manifesto.png 1235w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption>Figuur 1: De vier basiseigenschappen van Reactieve systemen en hoe ze zich tot elkaar verhouden.</figcaption></figure>



<p class="justify-text">Aan de grondslag van Reactive ligt het feit dat het &#8220;message driven&#8221; is (Zie Fig. 1). Men zal een systeem bouwen aan de hand van een aantal met elkaar communicerende subsystemen die berichten zullen uitwisselen. Dit kan zowel rechtstreeks als via het <a href="/het-event-als-leidend-voorwerp-in-software-engineering/" data-type="post" data-id="8942">publish/subscribe mechanisme van Events</a>. Deze communicatie is altijd inherent asynchroon. Men weet niet wanneer er op een bericht zal worden gereageerd en men gaat er ook niet expliciet op wachten. Deze vorm van communicatie tussen componenten zorgt ervoor dat ze losjes gekoppeld zijn en locatietransparant. Dit &#8220;message driven&#8221; fundament leidt verder tot verschillende voordelen.</p>



<p class="justify-text">Eerst en vooral zorgt dit voor resiliëntie. Asynchrone communicatie laat toe om componenten veel onafhankelijker van elkaar te laten opereren dan <a href="/data-centric-it-met-rest/" data-type="post" data-id="9535">synchrone communicatie</a>, wat ervoor kan zorgen dat één component verder kan indien de andere (tijdelijk) faalt. De manier waarop berichten behandeld worden bij Reactive maakt ook van foutmeldingen gewone berichten; men behandelt deze als &#8216;first class citizen&#8217;, en niet zozeer als een uitzondering. Het omgaan met fouten en met niet-werkende componenten wordt dan als van nature mee opgenomen in het programmeren van zo&#8217;n systeem.</p>



<p class="justify-text">Ten tweede stijgt ook de elasticiteit. Bij reactieve systemen is de berichtenstroom heel belangrijk. Men kan deze gaan monitoren en ingrijpen wanneer deze sterk in volume toe- of afneemt, en snel reageren door meer componenten op te starten (of te stoppen), om deze berichten af te handelen. Ook het feit dat het systeem bestaat uit een heel aantal samenwerkende componenten, en niet afhankelijk is van een centrale bottleneck, komt de schaalbaarheid ten goede.</p>



<p class="justify-text">Ten slotte moet dit alles samen zorgen voor een verhoogde responsiviteit. Men zorgt ervoor dat men tijdig en vooral binnen een bepaalde tijd kan reageren op alle binnenkomende berichten, voor een consistente Quality of Service.</p>



<h2 class="wp-block-heading">Het Akka raamwerk</h2>



<p class="justify-text"><a href="https://akka.io/">Akka</a> zag het licht in 2009 als één van de eerste raamwerken die het principe van het Actor programmeermodel naar een mainstream server programmeertaal bracht. Het is beschikbaar zowel voor de programmeertaal <a href="https://www.scala-lang.org/">Scala</a> (een taal die werkt op de JVM), waar het in principe voor is gebouwd, als voor Java (waar het iets meer boilerplate code vergt). Tegenwoordig maakt het deel uit van het <a href="https://www.lightbend.com/">Lightbend</a> platform, samen met het <a href="https://www.playframework.com/">Play raamwerk</a> en de taal Scala.</p>



<p class="justify-text">Actoren kan men zien als kleine onafhankelijke machines binnen een softwaresysteem. Ze communiceren enkel met de buitenwereld (en dus met andere actors) via asynchrone berichten. Wanneer een actor een bericht krijgt, kan deze een aantal verschillende dingen doen: lokale code uitvoeren, zijn eigen toestand veranderen, zelf berichten uitsturen, andere actoren creëren, en beslissen hoe op het volgende bericht zal worden gereageerd. Een actor leeft dus volledig binnen zijn eigen executie-stack. Men kan deze dus beschouwen als een apart proces of een aparte thread, maar in een raamwerk als Akka is het mogelijk om deze veel efficiënter te instantiëren dan dat (zelfs threads zijn nog relatieve zwaargewichten, terwijl een actor in akka maar een paar honderd bytes hoeft in te nemen; één thread zal dan ook typisch vele actors tegelijk aansturen). Daarnaast kan men er voor zorgen dat een actor een andere actor als &#8220;supervisor&#8221; krijgt. Deze zal in het oog houden of de gesuperviseerde actor faalt, en kan dus indien nodig gepast reageren.</p>



<p class="justify-text">Eén van de meest interessante zaken aan actors is dat het voor de programmeur transparant kan gemaakt worden waar een actor zich bevindt: het kan een andere actor binnen hetzelfde proces zijn, een actor binnen een ander proces op dezelfde machine, of een actor aan de andere kant van het internet: de programmeur kan deze op dezelfde manier behandelen. Dit is één van de eigenschappen die Akka <em><a href="https://www.cncf.io/">Cloud Native</a></em> maakt: het is een technologie gebouwd vóór de Cloud, waarmee men optimaal kan gebruik maken van de eigenschappen van de Cloud.</p>



<p class="justify-text">Naast de &#8216;core&#8217; Akka bibliotheek, bestaan er ook nog heel wat modulaire uitbreidingen, zoals b.v. voor het werken met streams, persistentie, webservers en http, en allerlei integraties, zoals b.v. met het Play framework, of met Apache Kafka. Ook RESTful APIs worden ondersteund.</p>



<h2 class="wp-block-heading">Een voorbeeld</h2>



<p class="justify-text">In de code duiken zou een beetje te technisch worden, maar we kunnen toch illustreren wat men met deze manier van programmeren kan bereiken aan de hand van een eenvoudig voorbeeld.</p>



<p class="justify-text">In onderstaande figuur zie je een tekening van een aantal actoren in een boekenwinkel systeem en de berichten die ze elkaar sturen: er zijn klanten, de boekenwinkel zelf, en bedienden (die boeken opsturen). Het systeem zal als volgt werken: klanten sturen bestellingen naar de winkel; deze zal de bestellingen verder doorgeven aan een bediende. Deze hebben wat tijd nodig om een bestelling af te handelen, dus er zijn er meerdere, om meer bestellingen aan te kunnen. Hoe de winkel kiest welke taak aan welke bediende te geven, zouden we op verschillende manieren kunnen oplossen (b.v. &#8220;neem een willekeurige vrije bediende&#8221;), maar zoveel detail laten we hier niet zien.</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2021/09/bookstore-default.png"><img decoding="async" width="1024" height="485" src="/wp-content/uploads/2021/09/bookstore-default-1024x485.png" alt="" class="wp-image-16459" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/09/bookstore-default-1024x485.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2021/09/bookstore-default-300x142.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/09/bookstore-default-768x363.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/09/bookstore-default.png 1192w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption>Figuur 2: De boekenwinkel aktors. Bij de standaard werking zullen bestellingen van klanten doorgegeven worden aan een pool van bediendes. Wanneer een boek niet kan worden geleverd, krijgt de klant in de plaats ervan een cadeaubon.</figcaption></figure>



<p class="justify-text">De bediende die een bestelling krijgt wordt &#8220;bezig&#8221; (een andere toestand dan &#8220;vrij&#8221;) en zal uiteindelijk een boek terugsturen naar de klant (in het geval van het IT systeem dat dit systeem modelleert, kan dit b.v. een bericht zijn met de tracking code van het pakket). Daarna wordt de bediende terug &#8220;vrij&#8221;.</p>



<p class="justify-text">Soms gaat er echter iets mis met de bestelling: de bediende vindt b.v. het boek niet dat de klant wil. In dat geval stuurt deze een verontschuldigend bericht terug naar de klant, met een cadeaubon. Als er echter te vaak van deze dingen gebeuren, krijgt een bediende teveel stress en geeft deze er de brui aan (zijn actor gaat in error-modus). Dit geeft dus een foutmelding, die geëscaleerd wordt naar de supervisor van de bediende, in dit geval de winkel (zie Fig. 3). Deze zal dan moeten beslissen wat er met de fout gebeurt: we kiezen ervoor om de bestelling aan een andere bediende te geven en de gestresseerde bediende een paar dagen &#8220;verlof&#8221; te geven (waarna zijn actor terug in toestand &#8220;vrij&#8221; zal komen).</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2021/09/bookstore-error.png"><img loading="lazy" decoding="async" width="1024" height="722" src="/wp-content/uploads/2021/09/bookstore-error-1024x722.png" alt="" class="wp-image-16460" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/09/bookstore-error-1024x722.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2021/09/bookstore-error-300x211.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/09/bookstore-error-768x541.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/09/bookstore-error.png 1121w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption>Figuur 3: Illustratie van de verschillende toestanden waarin een bediende zich kan bevinden, plus: wat gebeurt er indien een bediende er de brui aan geeft tijdens een bestelling (Error)? De bediende krijgt verlof van de winkel en de bestelling wordt doorgegeven aan een andere bediende.</figcaption></figure>



<p class="justify-text">Dit voorbeeld illustreert het principe van resiliëntie, gebruikmakende van actoren: de fout wordt niet speciaal als fout behandeld, maar als een bericht naar de winkel, die het probleem op dat niveau kan oplossen. Er wordt ook niet alleen gezorgd voor fout-tolerantie, maar ook voor veerkracht: uiteindelijk zal de foutieve actor worden hersteld en terug ter beschikking komen van de pool. Deze veerkracht maakt net het verschil tussen gewone fout-tolerantie en echte resiliëntie.</p>



<h2 class="wp-block-heading">Besluit</h2>



<p>De meeste bestaande raamwerken voor Reactive systemen focussen zich op het gebruik van streams van berichten/events, en op hoe deze zo efficiënt mogelijk te behandelen. Een raamwerk zoals Akka doet het net iets anders, door gebruik te maken van het actor paradigma. Dit biedt een verfrissende kijk op multi-threaded programming, en kan het bouwen van sommige systemen net iets gemakkelijker maken.</p>



<p class="justify-text">Het gebruik van actoren verhoogt in ieder geval het niveau van abstractie wanneer men over parallellisme en multi-threading probeert te redeneren, een oefening die berucht is voor zijn moeilijkheid.</p>



<p class="justify-text">Actors lijken erg nuttig voor het modelleren van zaken die een toestand en een gedrag vertonen in de echte wereld, zoals mensen, machines, of bedrijven. In het algemeen zijn ze goed inzetbaar wanneer je systeem goed decomposeerbaar is in een set van onafhankelijke taken, of een set van taken die een bepaalde workflow volgt. Ten slotte zijn ze ook erg geschikt voor het programmeren van <a href="/geavanceerd-event-driven-engineering/" data-type="post" data-id="9041">Event Driven systemen</a>.</p>



<p></p>


]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Fat Internet Applications</title>
		<link>https://www.smalsresearch.be/fat-internet-applications/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Sun, 10 Jul 2011 06:38:43 +0000</pubDate>
				<category><![CDATA[Blog post]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[FIA]]></category>
		<category><![CDATA[html 5]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[multithreading]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[webapp]]></category>
		<guid isPermaLink="false">http://blogs.smals-mvm.be/research/?p=2158</guid>

					<description><![CDATA[Vettige Internet Applicaties? Neen, ik heb het niet over de allerlaatste versie van de Weight Watcher Webapp. Wat ik Fat Internet Applications (FIA) noem, zou echter wel eens een belangrijke rol kunnen gaan spelen in de toekomst van dat andere WWW&#8230; Maar wat bedoel ik dan met deze &#8220;zware&#8221; internet applicaties? In tegenstelling tot FIA, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Vettige Internet Applicaties? Neen, ik heb het niet over de allerlaatste versie van de Weight Watcher Webapp. Wat ik Fat Internet Applications (FIA) noem, zou echter wel eens een belangrijke rol kunnen gaan spelen in de toekomst van dat andere WWW&#8230;</p>
<p><span id="more-2158"></span></p>
<p>Maar wat bedoel ik dan met deze &#8220;zware&#8221; internet applicaties? In tegenstelling tot FIA, zal iedereen allicht al ooit wel eens hebben gehoord van <strong>RIA </strong>&#8211; <a href="https://documentatie.smals-mvm.be/consultancy/Research1ORIG.nsf/966aaac9c68c64d0c1256858002c7036/190f3bacac1a111dc1257471005231e5?OpenDocument">Rich Internet Applications</a>. Dit zijn webapplicaties met een rijke gebruikersinterface, m.a.w. webapps die er &#8220;goed&#8221; uitzien en de interactiemogelijkheden bieden van traditionele desktop applicaties.</p>
<p>Waar men misschien ook al eens van heeft gehoord, zijn Fat Clients, een gemakkelijk bekkende naam voor Heavyweight Clients. Deze zware clients zijn desktop applicaties die een deel van het werk van een server op zich nemen, en dus lichtere servers toelaten &#8211; in tegenstelling tot Thin Clients. De kracht van de gebruikers eigen machine wordt op die manier nuttig gebruikt. Fat clients waren een natuurlijke evolutie toen de machine van de eindgebruiker beter werd en zware mainframes uit de mode geraakten. Van terminal-mainframe communicaties ging men dus over op client-server. Later, dankzij de populariteit van het web, is men dan uiteindelijk overgeschakeld op webserver-RIA-browser.</p>
<p>Fat Internet Applications vormen dan een mengsel van RIA met fat clients. Fat clients dus, maar dan in de vorm van een webapplicatie. Een internettoepassing, zeg maar, die een deel business logica bevat om de server &#8211; en de netwerkverbinding met de server &#8211; te ontlasten. En omdat men niet meer anders kan tegenwoordig, zal deze er ook goed moeten uitzien, en dus een RIA zijn. Men kan zelfs stellen dat FIA&#8217;s een evolutie zijn op RIA&#8217;s, en dat sommige RIA&#8217;s eigenlijk al FIA&#8217;s kunnen worden genoemd. Niet alle bestaande RIA&#8217;s zijn echter noodzakelijkerwijs FIA&#8217;s. Het al dan niet rich zijn heeft eigenlijk niets te maken met het al dan niet fat zijn, en een aantal RIA&#8217;s ondersteunen vooral de Look &amp; Feel van de app, en gebruiken de server voor het grootste deel van de achterliggende logica.</p>
<p>Aan de invoering van FIA&#8217;s zijn een aantal voor- en nadelen verbonden. Allereerst een nadeel: men moet aan dubbele validatie doen van de ingevoerde gegevens. Een eerste keer in de client, zodat deze er zonder gevaar mee kan werken, en een tweede keer aan de serverkant, omdat men nooit kan garanderen dat het wel degelijk een zich goed gedragende client-applicatie is, die met de server communiceert. Vooral dit tweede zou men al eens kunnen vergeten&#8230;</p>
<p>Het grote voordeel is natuurlijk dat zware operaties door de client kunnen worden uitgevoerd. Denk maar aan compressie of <strong>encryptie </strong>van gegevens. Dit opent een aantal deuren voor applicatieontwikkelaars, die er bij het gebruik van thin clients niet waren. Zo kan men tegenwoordig een applicatie maken voor online gegevensopslag, waarbij de gegevens door de client geëncrypteerd worden. Dit is niet alleen performanter, maar ook veiliger, want de gegevens hoeven niet eens in onvercijferde vorm naar de server te worden gestuurd.</p>
<p>Spijtig genoeg is het momenteel wel mogelijk, maar nog niet zeer vanzelfsprekend om een FIA te bouwen. Er zijn namelijk een aantal zaken nodig, die men vaak slechts door gebruik van plugins ter beschikking heeft in webapplicaties. Om een zeer responsieve gebruikersinterface te hebben, kan het bijvoorbeeld nodig zijn <strong>multithreading </strong>toe te passen, zodat de user interface niet &#8216;hangt&#8217; tijdens een zware berekening. Bovendien zou een FIA wel eens veel geheugen kunnen vragen, hetwelke het misschien niet altijd krijgt van de browser.</p>
<p>Momenteel is het nog erg lastig om, gebruikmakende van enkel javascript, een FIA te maken. Technologieën zoals Flash en Silverlight laten dit wel al toe, maar vereisen uiteraard een browser plugin. Er is dus nog nood aan betere frameworks en browserondersteuning.</p>
<p>In mobile devices heeft men een andere oplossing dan browser-plugins: dit zijn de native apps. Deze kunnen gebruik maken van de uitgebreide functionaliteit van het toestel, omdat ze buiten de browser opereren. Het grote nadeel hiervan is natuurlijk dat zulke apps voor elk soort device opnieuw moeten worden geschreven &#8211; eigenlijk zijn het gewoon fat clients die eruitzien als een webapp.</p>
<p>Misschien zorgt Html 5 voor een stap in de goede richting. Met <strong>Html 5</strong> wordt het mogelijk om stukken javascript code in een aparte thread uit te voeren, wat voor een vorm van concurrency kan zorgen in de applicatie. Verder zal er in de nieuwe markup taal een soort lokaal geheugen voorzien zijn voor applicaties. Op die manier wordt het terug mogelijk om FIA&#8217;s te bouwen voor elke browser die Html 5 ondersteunt, zonder dat deze plugins nodig heeft, waardoor men dus platformonafhankelijk zou kunnen ontwikkelen.</p>
<p>Besluit? Het internet van morgen zal zowel de voordelen van internet-connectiviteit kunnen nuttigen, als de voordelen die ontstaan uit steeds krachtiger wordende client-devices, zowel vast als mobiel. De technologie om dit mogelijk te maken is in volle ontwikkeling en Fat Internet Applications zijn begonnen aan hun opmars.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
