<?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>concurrency &#8211; Smals Research</title>
	<atom:link href="https://www.smalsresearch.be/tag/concurrency/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>concurrency &#8211; Smals Research</title>
	<link>https://www.smalsresearch.be</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Waarom McDonalds niet synchroon werkt</title>
		<link>https://www.smalsresearch.be/waarom-mcdonalds-niet-synchroon-werkt/</link>
		
		<dc:creator><![CDATA[Johan Loeckx]]></dc:creator>
		<pubDate>Mon, 21 Nov 2011 08:57:12 +0000</pubDate>
				<category><![CDATA[Blog post]]></category>
		<category><![CDATA[asynchronous design]]></category>
		<category><![CDATA[caching]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[scalability]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">/?p=3479</guid>

					<description><![CDATA[De laatste tijd moet ik vaak de discussie voeren waarom traditioneel silo-based synchrone ontwerpen niet geschikt zijn voor schaalbare systemen.  Een systeem wordt schaalbaar genoemd als elke verdubbeling van de infrastructuur voor een gelijkaardige toename van het aantal parallelle requests zorgt, zonder verlies van performantie. Dit klinkt niet zo uitdagend? Dit kunnen we op de [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>De laatste tijd moet ik vaak de discussie voeren <strong>waarom traditioneel silo-based synchrone ontwerpen niet geschikt zijn voor schaalbare systemen</strong>.  Een systeem wordt schaalbaar genoemd als elke verdubbeling van de infrastructuur voor een gelijkaardige toename van het aantal parallelle requests zorgt, zonder verlies van performantie. Dit klinkt niet zo uitdagend? Dit kunnen we op de standaard manier bekomen?</p>
<p>Tijd dan voor een denkoefening: we gaan de klassieke manier van ontwerpen toepassen op de werking van een McDonalds restaurant&#8230;</p>
<h2><span id="more-3479"></span>Synchrone verwerking</h2>
<p>Bij McDonalds is <strong>de verwerking van de bestellingen ontkoppeld van het vervaardigen van de hamburgers.  </strong>Beeld u in dat een verkoper verantwoordelijk zou zijn voor de hele (verticale) keten.   Hij zou de bestelling opnemen, de hamburger klaarmaken,de afrekening geven en slechts dan de volgende klant bedienen.  Als deze handeling 5 minuten duurt, kun je met één verkoper 12 klanten kunnen bedienen per uur.</p>
<p>Hij zou niet weten dat de volgende bestelling identiek zou zijn.. Hij zou voortdurend van context moeten veranderen (handen wassen), geld in ontvangst nemen.   Ook zou er erg moeilijk samengewerkt kunnen worden tussen de verschillende verkopers. Niet echt efficiënt dus.</p>
<p>&nbsp;</p>
<h2>Geen concurrency control (volledige parallellisatie)</h2>
<p>Wat als je 24 klanten per uur wil bedienen? Per veelvoud van 12 moet er een extra verkoper aangeworven worden.  En wat als op een bepaald moment  deze 12 klanten tegelijk zouden aankomen?  De 12de zou een uur moeten wachten&#8230;</p>
<p>Maar wacht &#8212; deze verkoper kan misschien wel verschillende bestellingen tegelijk aannemen? (cf. multithreading) In het extreme geval wordt elke nieuwe bestelling meteen door een verkoper behandeld.  Hij is dan tegelijk bezig met het afhandelen van een betaling, het maken van een paar hamburgers, het opnemen van enkele bestellingen.  Iedereen ziet wel in dat de <strong>efficiëntie van deze verkoper drastisch zal dalen door deze &#8220;parallellisatie&#8221; &#8211;</strong>&#8211; hij beschikt immers slechts over beperkte resources (kan bv. maar N woorden per minuut schrijven &#8211; I/O)</p>
<p>Het is duidelijk dat er een <strong>optimale trade-off moet gevonden worden tussen de hoeveelheid parallellisatie</strong> (# tegelijk behandelde requests door een machine) <strong>en de grootte van de wachtrijen</strong>.  Stel dan nog dat je &#8220;oneindig&#8221; veel verkopers kunt aannemen&#8230; Op een bepaald moment is er een plaatsgebrek, niet?  Het evenwicht bevindt zich typisch niet aan een van de extremen en <strong>hangt af van de bezoekpatronen van de McDanolds</strong> &#8212;  misschien komen er nooit 12 mensen tegelijk aan?</p>
<p>&nbsp;</p>
<h2>Centraal register met recepten (centrale database)</h2>
<p>Omwille de kwaliteit te garanderen, stelt de chef-kok een centraal register op waarin beschreven staat hoe elke hamburger bereid moet worden.  Omdat de chef zeker wil zijn dat de juiste recepten gevolgd worden, is het een verplichting  om het register steeds te raadplegen voor het klaarmaken van een hamburger.  5 verkopers kunnen wel samen lezen, maar als de chef een wijziging aanbrengt, is het register niet meer zichtbaar.</p>
<p>Wat als er 50 verkopers een recept willen lezen? Of wat als er heel vaak wijzigingen gebeuren?  Hoeveel verkopers er ook aangeworven worden, de bottleneck bevindt zich op het centraal register.  En wat als iemand het register per ongeluk onleesbaar maakt?</p>
<p>&nbsp;</p>
<h2>Caching aan het eind van de keten</h2>
<p>Een ingrediënt voor een bepaald type hamburger is niet meer in stock.  Het is dus onmogelijk om deze hamburger te bereiden.   Omdat de verkoper echter geen korte-termijn geheugen heeft (geen cache), moet hij telkens het recept gaan opzoeken in het centraal register.  Hier haalt hij de ingrediënten op en vraagt of ze nog beschikbaar zijn.  Niet dus &#8212; de verkoper loopt terug naar de klant en brengt het spijtige nieuws. Hij loopt onnodig heen, en weer.</p>
<p>&nbsp;</p>
<h2>Bottom line</h2>
<p>Het is belangrijk om bepaalde ontwerp-reflexen in vraag te stellen. Vaak zijn het dogma&#8217;s die niet universeel geldig zijn en een serieuze performantie, beschikbaarheid en schaalbaarheidsimpact hebben.</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>
