ID.nl logo
Wat is multithreading en wat heb je er aan?
© PXimport
Huis

Wat is multithreading en wat heb je er aan?

De afgelopen jaren is het aantal cores in mainstream desktopplatformen flink toegenomen. Er is nu zelfs een 16core-processor te krijgen. Maar wat is multithreading nou precies? En wat zijn de technische beperkingen en uitdagingen die hiermee gepaard gaan?

Toen in de jaren 2000 bleek dat de kloksnelheden van processors niet onbeperkt verhoogd konden worden, werd de keuze gemaakt om in te zetten op meer processorcores. Een systeem met meerdere cores was niet nieuw. Servers hadden al langere tijd multisocket-moederborden, met ondersteuning voor meerdere processors. Doordat nu meerdere cores werden geïntegreerd in een enkele zogenoemde ‘die’, werd multithreading een stuk toegankelijker.

Het daadwerkelijk goed benutten van die extra cores loopt wel achter op de technische verbeteringen. Sommige programma’s zijn goed geoptimaliseerd voor multithreading en kunnen 16 cores benutten, maar dit is lang niet altijd het geval. Dit heeft meerdere oorzaken, waar we nu naar gaan kijken.

Wat zijn threads?

Allereerst is het belangrijk om onderscheid te maken tussen processen en threads. Elk proces beschikt over zijn eigen geheugensegment en opereert in principe compleet onafhankelijk van andere processen. Het besturingssysteem voorkomt elke poging van een proces om bij het geheugen van een ander proces te komen. Daarentegen zijn threads niet volledig onafhankelijk. Ze kunnen bij het geheugen van andere threads komen, maar het is wel een andere ‘draad’ van executie, die tegelijkertijd met de andere threads wordt uitgevoerd. Een proces kan meerdere threads hebben, maar een thread kan zelf geen eigen processen hebben.

Er zijn twee soorten threads: software-threads en hardware-threads. Het aantal software-threads wordt bepaald door het totale aantal ‘draden’. Dit kan veranderen, afhankelijk van het opstarten en afsluiten van programma’s. Wanneer we in dit artikel het woord thread zonder kwalificatie gebruiken, bedoelen we software-threads.

Het aantal hardware-threads ligt juist vast, en is afhankelijk van het aantal cores en of er Simultaneous Multithreading (SMT) wordt ondersteund. Een 8core-processor met SMT heeft bijvoorbeeld 16 threads.

Ideaal is een situatie waarbij er evenveel software-threads zijn als hardware-threads. Wanneer er minder software-threads zijn, wordt de hardware niet efficiënt benut. Dat spreekt voor zich, maar ook een te groot aantal software-threads kan negatief uitpakken voor de prestaties.

Threads versus processen

Zowel processen als threads kunnen gebruikt worden voor ‘concurrency’, een term die iets breder is dan multithreading, omdat het alles omvat waarbij meerdere taken tegelijkertijd worden uitgevoerd. Het voordeel van het gebruik van processen is dat het crashen van een proces niet leidt tot het beëindigen van het programma: Google gebruikt voor zijn Chrome-browser bijvoorbeeld meerdere processen om de stabiliteit te verbeteren.

Het grote nadeel is dat het opstarten van een proces veel trager is dan het starten van een thread. Dit is vooral het geval op Windows, waarbij alle bronnen van tevoren toegekend moeten worden. Linux heeft een andere implementatie, waarbij een proces zichzelf kan klonen. Deze kloon of ‘fork’ heeft toegang tot alle bronnen van het eerste proces. Door copy-on-write krijgt het tweede proces pas zijn eigen kopie van delen van het geheugen, als het ernaar probeert te schrijven. Dit zorgt voor veel efficiëntere multiprocessing dan op Windows, waarbij het zoals gezegd voor het creëren van een proces noodzakelijk is dat alle bronnen van tevoren toegewezen worden.

©PXimport

Aangezien threads dezelfde bronnen delen, is het makkelijker voor threads om te communiceren dan voor processen (maar zoals in de paragraaf ‘Gezamenlijk geheugengebruik’ wordt uitgelegd, is dit ook erg gevaarlijk). Inter-process communication is een kunst op zich en dat gaat vaak via omwegen die veel zwaarder en trager zijn dan wat voor threads mogelijk is. Niettemin is er een plaats voor multiprocessing en dit is vaak ook een stuk eenvoudiger te programmeren dan multithreading.

Sommige taken zijn relatief eenvoudig multithreaded te maken, dit geldt bijvoorbeeld voor 3D-rendering en encoderen onder. Andere programma’s, zoals computer assisted design (CAD), zijn dan weer noodgedwongen singlethreaded. Dit is niet willekeurig, maar hangt af van hoe geschikt een bepaald programma is voor multithreading.

Rekenen

Het belangrijkste punt is dat er zo min mogelijk afhankelijkheidsrelaties moeten zijn. In wiskundige termen moet de taak associatief zijn, wat inhoudt dat het niet uitmaakt in welke volgorde hij wordt uitgevoerd. De plusoperatie is bijvoorbeeld associatief, waardoor de volgende simpele berekening prima in een andere volgorde kan worden uitgevoerd: x = 4 + 2 + 5 + 6.

We zouden deze som met of zonder afhankelijkheid kunnen uitvoeren. In het eerste geval berekenen we eerst 4 + 2, vervolgens 6 + 5 en uiteindelijk 11 + 6. Tijdens elke stap hebben we de uitkomst van de vorige berekening nodig. Stel dat we dit anders doen, dat we eerst 4 + 2 berekenen, dan 5 + 6 en tot slot de uitkomst hiervan bij elkaar optellen. Het aantal benodigde berekeningen verandert niet, dat blijft drie, maar de afhankelijkheid is verminderd.

Voor de mens wordt het er niet makkelijker op, maar een cpu zou de eerste twee berekeningen tegelijkertijd kunnen uitvoeren, waardoor er (uitgaande van een enkele klokcyclus voor de add-instructie) maar twee klokcycli nodig zijn en niet drie. Dit voorbeeld dient ter illustratie, want als deze getallen worden ingevoerd als ‘literals’ (vaste getallen), weet een beetje compiler wel het juiste antwoord direct in te voeren.

©PXimport

Heel spannend klinkt dit misschien niet, maar de vorige paragraaf verklaart waarom bijvoorbeeld het encoderen van video zo goed als perfect multithreaded is. Het beeld wordt opgedeeld in bijvoorbeeld zestien verschillende delen. Deze hebben ieder niets te maken met de andere delen, waardoor processorthreads er onafhankelijk aan kunnen werken. Uiteindelijk wordt het beeld samengevoegd, iets wat wel afhankelijk is van de eerdere berekeningen, maar triviaal is daarmee vergeleken.

Het verklaart ook waarom sommige andere taken heel slecht geschikt zijn voor multithreaded, zoals CAD en sommige Photoshop-filters. Deze hebben een zeer hoge mate van afhankelijkheid van andere delen van een foto, waardoor het niet mogelijk is om de taak op te splitsen in verschillende delen. Het gevolg is dat er minder threads aan kunnen werken.

In hoeverre multithreading de prestaties kan verbeteren, kan uitgerekend worden op basis van het deel van het werk dat parallel te maken is. Dit heet de wet van Amdahl en luidt als volgt: 1 / (1 – p), waarbij p staat voor het deel dat te parallelliseren is. Een programma waarbij de helft geschikt is voor multithreading, kan met een onbeperkt aantal cores maximaal twee keer zo snel worden. Dit is omdat het voor de helft van de tijd niet uitmaakt hoeveel cores er zijn.

Thread-safety en cache coherence

Drie termen die vaak worden gebruikt in combinatie met multithreading zijn thread-safe, thread-unsafe en thread-compatible. Dit gaat altijd over delen van een bepaald programma, oftewel functies. Allereerst heb je functies die thread-unsafe zijn. Deze kunnen überhaupt niet vanuit meerdere threads gebruikt worden. Dit is vrijwel altijd het resultaat van slecht programmeerwerk. Het standaardniveau is thread-compatible. Dit betekent dat de functie geen problemen oplevert, zolang er niets naar het geheugen wordt geschreven.

Zonder wijzigingen is er ook geen synchronisatie noodzakelijk. Het hoogste niveau is thread-safe. Dit betekent dat er data wordt gewijzigd, maar dit levert geen problemen op dankzij de synchronisatiemechanismes die we verderop bespreken.

©PXimport

Iets wat multithreading heel ingewikkeld maakt, is het probleem van ‘cache coherency’, een van de fundamentele uitdagingen in de computerwetenschap. Dit gaat over de vraag hoe je ervoor zorgt dat het geheugen consistent is wanneer er meerdere programma’s zijn die hetzelfde geheugen lezen en ernaar schrijven. Het grote probleem is dat deze lees- en schrijfoperaties via de cache gebeuren, omdat deze vele malen sneller is dan het werkgeheugen. Aangezien iedere core zijn eigen cache heeft, kan het gebeuren dat de waarde hier verschilt met die in het geheugen, doordat een andere thread het geheugen heeft veranderd, of doordat de huidige thread de cache heeft aangepast en deze nog niet is bijgewerkt in het geheugen.

Gezamenlijk geheugengebruik

Op zich is het geen enkel probleem als er meerdere threads gebruik willen maken van hetzelfde geheugen, zolang er maar geen enkele thread is die naar het geheugen schrijft. Als er meerdere threads naar het geheugen schrijven, is dat zeker een probleem. Dit maakt multithreading onmiddellijk een stuk moeilijker … en gevaarlijker! Om een heel simpel voorbeeld te geven: stel dat er een programma is met een functie die enkel een teller verhoogt. Het volgende is een voorbeeld in C++:

void incr(){
static int i = 0;
++i; }

We willen dit programma graag multithreaded maken. Simpeler dan dit kan niet, dus je zou verwachten dat dit geen problemen zou kunnen geven. Helaas niet. Er gaat veel meer gepaard met het verhogen van een teller dan je zou verwachten. Dit heet een RMW- operatie: read-modify-write. Het systeem moet eerst uitlezen wat de teller is (bijvoorbeeld door het te kopiëren naar een processorregister), vervolgens dit aantal verhogen met 1 en dit daarna terugschrijven naar de geheugenlocatie. Vooral deze laatste stap gaat gepaard met een aanzienlijke vertraging. Wat als de teller op 2 staat en de functie wordt twee keer tegelijkertijd aangeroepen? In beide gevallen zal de functie 2 lezen en zal de verhoging daarom uitkomen op 3, terwijl het eigenlijk 4 zou moeten zijn.

Het kan nog erger. Het uitlezen ging het vorige voorbeeld immers nog netjes, ondanks het gelijktijdig beschrijven van exact hetzelfde geheugen. We krijgen óf de waarde van voor de laatste verandering óf die van daarna, maar niet iets anders. Dit is lang niet op alle processorarchitecturen zo (maar wel op x86). In een ander geval kan de tweede functie een willekeurig getal uitlezen, bijvoorbeeld 284 of -90. Dit getal wordt dan netjes vermeerderd met 1, maar het komt helaas op iets anders uit dan de 4 die we willen hebben. Het resultaat is ongedefinieerd gedrag, wat inhoudt dat er geen enkele garantie is voor wat de uitkomst is.

Een race-conditie is wanneer de uitkomst van een programma afhangt van de volgorde waarin of de tijd waarop bepaalde code toevallig wordt uitgevoerd. Een programma hoort deterministisch en daarmee voorspelbaar te zijn, dus een goed programma hoort vrij te zijn van race-condities. Wat we willen, is dat de tweede oproep van de functie netjes wacht totdat de vorige klaar is, en dat hij daarom ook de nieuwe waarde leest. Hiervoor is synchronisatie noodzakelijk, iets wat we hierna bespreken.

©PXimport

Mutex en Atomics

Een veelgebruikt synchronisatiemechanisme is een ‘mutual exclusion object’ (mutex). Een mutex is vergelijkbaar met een ‘stoplicht’, dat voorkomt dat meerdere threads tegelijkertijd bij een bepaald deel van het geheugen kunnen komen. Een thread die toegang wil, zal eerst een vrije mutex op ‘slot’ zetten. Elke volgende thread die bij de mutex komt, zal geblokkeerd worden totdat de mutex weer vrijgegeven wordt door de eerste thread.

Mutexen hebben alleen wel de nodige problemen. Zo zijn ze relatief sloom en gevaarlijker is het probleem van potentiële deadlocks. Dat is wanneer verschillende delen van een programma meerdere van dezelfde mutexen nodig hebben, dan kan het gebeuren dat een benodigde mutex nooit vrijgegeven wordt en dat het programma blijft hangen. Deze kans is nog aanzienlijker wanneer met andere mutexen beschermde delen van het programma afhankelijk zijn van elkaar. Als deze dan tegelijkertijd gedraaid worden, dan wacht de ene thread op een vrije mutex totdat hij zijn eigen mutex vrijgeeft, terwijl de eerste mutex niet vrijkomt totdat de eerste thread klaar is met zijn werk. Er moet dus op een goed doordachte manier geprogrammeerd worden. Een simpel voorbeeld in C++:

void incr(){
static mutex mut1;
static int i = 0;
lock_guard<mutex> lck(mut1); </mutex>
++i;
} // mutex wordt automatisch vrijgegeven

In sommige gevallen kan het lonen om in plaats van een gewone mutex een ‘reader writer’-mutex te gebruiken. Deze kan of aan één thread schrijftoestemming geven of aan een onbeperkt aantal threads leesbevoegdheid. Aangezien alleen veranderend geheugen race-condities oplevert, kan dit de prestaties verbeteren als er maar weinig naar het beschermde geheugen wordt geschreven.

Concurrency-problemen kunnen in sommige gevallen ook opgelost worden door het gebruiken van variabelen die geen tussenstaat laten zien. Deze heten ‘atomics’ in C en C++, en ‘volatile’ variabelen (vluchtige variabelen) in Java en C#. Als we een atomische variabele gebruiken voor ons eerdere scenario, dan begint de tweede operatie pas wanneer de eerste klaar is. Dan heb je niet het probleem dat een van de vermeerderingen potentieel verloren gaan.

Volgorde

Simpele atomics lossen niet alle problemen op. Atomische variabelen kunnen ook garanderen dat bepaalde code in een voorgeschreven volgorde wordt uitgevoerd. Elke atomische operatie heeft een bepaalde ‘memory barrier’, ook wel ‘memory order’ genoemd. Deze barrière bestaat uit een ‘acquire’-laadoperatie die wordt gekoppeld aan ‘release’-opslagoperatie. Tussen deze twee operaties wordt er een zogenoemde ‘çritical section’ gecreëerd. Instructies binnen dit deel is sterk beperkt in herordening: ze mogen niet buiten de sectie worden gebracht door de compiler of de processor. Dit garandeert dat alle instructies binnen (en voor) dit deel zijn uitgevoerd wanneer er een ‘acquire’ wordt uitgevoerd. Ook wordt er gegarandeerd dat de laatste waarde van de atomische variabele is geschreven naar het geheugen en de caches, zodra de acquire is uitgevoerd.

Als er toegang wordt gevraagd voordat het systeem hier klaar mee is, wordt toegang tot de betrokken delen van het geheugen geblokkeerd. Dit om te voorkomen dat er iets gebeurt met de tussenstaat van de variabele. Hier zijn speciale machine-instructies voor, die het werk efficiënter kunnen verrichten dan een mutex. Het volgende voorbeeld laat zien hoe dat werkt.

void incr(){
static atomic<int> i(0); </int>
++i; }

In de praktijk komt dit erop neer dat een ‘release’ informatie publiceert die een ‘acquire’ kan opvragen (bij een RMW-operatie is er een gecombineerde acquire en release). Waar zou dit nuttig voor kunnen zijn? Veel systemen moeten van een valide staat naar een andere valide staat gebracht worden, zonder dat er het een en ander kan gebeuren in de tussenstaat. Om maar een voorbeeld te geven: bij het uitvoeren van een banktransactie is het een goed idee om zowel de vermindering als de vermeerdering op de respectieve rekeningen als een alles-of-niets-transactie uit te voeren.

Het voordeel van atomics ten opzichte van een mutex, is dat ze sneller zijn en dat deadlocks niet tot de mogelijkheden behoren. Het nadeel is dat ze nog altijd substantieel langzamer zijn dan gewone variabelen, vooral wanneer het gaat om schrijfacties. Veranderingen moet immers verspreid worden naar niet alleen de verschillende caches, maar ook naar het werkgeheugen. In de tussentijd mag er geen enkele andere thread gebruikmaken van de oude waarde. Een verder nadeel is dat niet alles met atomische variabelen geïmplementeerd kan worden. Programma’s die hier wel gebruik van maken, heten ‘lockfree’, omdat ze geen gebruikmaken van een mutex-slot.

▼ Volgende artikel
Review Sony WF-C710N – Upgrade om enthousiast over te worden
© Wesley Akkerman
Huis

Review Sony WF-C710N – Upgrade om enthousiast over te worden

Met de WF-C710N geeft Sony zijn betaalbare oordoppen een frisse update. De nieuwe set kost 119 euro – niet het allergoedkoopste, maar zeker interessant als je kijkt naar wat je ervoor terugkrijgt.

Uitstekend
Conclusie

Ondanks dat we niet het idee hebben dat de geluidskwaliteit er gigantisch op vooruitgegaan is, zijn we toch heel enthousiast over de Sony WF-C710N. Dat komt doordat de Japanse gigant een aantal waardevolle upgrades doorvoerde voor dit aangepaste model. De actieve ruisonderdrukking brengt rust en stilte, de accu gaat langer mee en de bediening werkt nu veel beter. Daarnaast verstaan mensen je beter tijdens telefoongesprekken en is er nu de multipointverbinding. Twijfel je tussen de C700N en C710N? Dan is de keuze duidelijk.

Plus- en minpunten
  • Cool ontwerp
  • Lange accuduur
  • Multipoint
  • Verbeterde bediening
  • Pasvorm
  • Equalizer
  • Draagcomfort
  • Met draagdetectie
  • Geen hi-res audio
  • IPX4-certificaat
  • Weinig codecs

Hoewel voorganger C700N momenteel voor minder dan 80 euro te koop is, vinden we de 119 die je voor de CF710N betaalt niet ontzettend hoog. Niet alleen omdat de C700N een tientje duurder was tijdens de introductie, maar ook omdat je veel kwaliteit in huis haalt. Komt de nieuwe set in de buurt van de veel duurdere marktleider WF-1000XM5? Nee, dat niet, maar daar betaal je dan ook het dubbele voor. De CF710N wil in elk geval wat problemen oplossen van de C700N, door verbeteringen door te voeren op het gebied van ruisonderdrukking, bediening en meer.

©Wesley Akkerman

Onvervalste 90's-vibe

De versie die wij testen beschikt over een unieke kleur en vormgeving. Zowel de oplaadcase als de oordoppen zijn gemaakt van transparant, blauw plastic. Daardoor stralen de oordopjes een onvervalste 90’s-vibe uit. Toegegeven, het moet net je ding zijn. Maar eerlijk is eerlijk: op een markt waar veel oortjes er saai en veilig uitzien, zijn we blij dat Sony het anders doet. Je kunt ze ook in het roze kopen als je wilt, en anders zijn wit en zwart nog beschikbaar. Mocht je het toch wat strakker en zakelijker willen houden, dan is dat dus nog steeds goed mogelijk.

Ten opzichte van de vorige versie heeft Sony een aantal belangrijke dingen aangepast. Als we nog even bij de case blijven, dan is het goed om te zien dat die nu tot dertig uur aan luistertijd biedt. Dat is een verdubbeling ten opzichte van de voorganger. Waarbij wel aangetekend dat dit alleen geldt als je géén actieve ruisonderdrukking activeert. Als je die modus aanzet, dan heb je pakweg 25 uur tot je beschikking. Nog steeds erg respectabel, aangezien de voorganger het met ongeveer 20 uur moest doen. Daarnaast kun je nu met 5 minuten laden 60 minuten luisteren.

©Wesley Akkerman

Nieuwe sensoren aan boord

Verder heeft Sony goed gekeken naar verschillende sensoren. Zo zijn we erg blij dat de oordoppen de muziek pauzeren op het moment dat je ze uit je oren haalt. Dat deed de C700N niet. Ook zijn de knopjes ingeruild voor een aanraakgevoelig oppervlakte. Daarmee pas je het volume aan, kun je muziek pauzeren en meer. Je hoeft hiervoor niet hard op de dopjes te drukken, zoals bij de voorganger nog wel eens het geval kon zijn. Door de nieuwe bediening druk je ze dus niet meer zo vaak de gehoorgang in, wat voor een comfortabele fit zorgt.

De water- en stofbestendigheid is er niet op vooruitgegaan (die blijft steken op IPX4), maar Sony heeft wel multipointverbinding toegevoegd. Daardoor kun je de WF-C710N aan twee apparaten koppelen, en daar heel gemakkelijk tussen wisselen. Daarnaast helpt een AI-algoritme met het oppakken van je stem tijdens het bellen. De mensen met wie we gebeld hebben geven aan dat ze ons goed kunnen verstaan, en dat ze geen last hebben van achtergrondherrie. Klinkt allemaal goed tot nu toe, maar hoe zit het met de audiokwaliteit?

©Wesley Akkerman

Dezelfde audiokwaliteit?

Voor zover wij opgemerkt hebben, bieden zowel de WF-700N als de WF-C710N dezelfde audiokwaliteit. Sony claimt wel wat wijzigingen te hebben doorgevoerd aan de DSEE (Digital Sound Enhancement Engine), maar eerlijk is eerlijk – we zouden niet weten wat er dan anders is. Maar geen nood, want allebei de setjes oordoppen klinken fantastisch, helemaal als je de prijs in acht neemt. Je moet nog wel even de app in duiken om het geluid naar eigen gehoor aan te passen. Maar als je dat gedaan hebt, dan zit er weinig in de weg van het genieten.

Binnen de app tref je verschillende opties aan voor het versterken of aanpassen van het geluid. Er zijn allerlei presets, waarvan Enthousiast nog steeds onze favoriet is, evenals een handmatig in te stellen equalizer. Koppel dat aan de eerdergenoemde DSEE-basis en je houdt een over het algemeen zachte, warme weergave over. Hogere tonen kunnen hier en daar wat afgemeten klinken, maar we hebben niet het idee dat we echt iets missen tijdens het luisteren. Zeker niet als we ondertussen werken, in de trein of bus zitten of over straat lopen. Dit klinkt gewoon goed.

Tot slot werpen we nog een blik op die verbeterde actieve ruisonderdrukking. Die is, in vergelijking met zijn voorganger, reusachtig verbeterd. Aangezien de ruisonderdrukking van de voorganger nog wat te wensen overliet, is dit dus een waardevolle upgrade. Wanneer je de modus activeert, word je goed afgesloten van de omgeving. Aanwezige achtergrondgeluiden verdwijnen als sneeuw voor de zon. Je hoort nog wel wat mensen praten, zeker als ze naast je staan, maar over het algemeen ervaar je een groot gevoel van rust en stilte.

Sony WF-C710N kopen?

Ondanks dat we niet het idee hebben dat de geluidskwaliteit er gigantisch op vooruitgegaan is, zijn we toch heel enthousiast over de Sony WF-C710N. Dat komt doordat de Japanse gigant een aantal waardevolle upgrades doorvoerde voor dit aangepaste model. De actieve ruisonderdrukking brengt rust en stilte, de accu gaat langer mee en de bediening werkt nu veel beter. Daarnaast verstaan mensen je beter tijdens telefoongesprekken en is er nu de multipointverbinding. Twijfel je tussen de C700N en C710N? Dan is de keuze duidelijk.

▼ Volgende artikel
Wasmachine en droger stapelen: waar moet je op letten?
© Samsung
Huis

Wasmachine en droger stapelen: waar moet je op letten?

In veel huishoudens is de ruimte beperkt. Zeker in een appartement, kleine badkamer of smalle bijkeuken is het stapelen van een wasdroger op de wasmachine een aantrekkelijke oplossing. Maar zomaar die droger erop zetten is niet verstandig. Een instabiele opstelling kan voor schade of gevaarlijke situaties zorgen. Gelukkig is het goed te doen – als je weet waar je op moet letten.

In dit artikel lees je: • Of elke droger op elke wasmachine past • Wat je nodig hebt voor een stabiele stapelopstelling • Hoe je voorkomt dat je apparaten schade oplopen • Wanneer een trillingsmat zin heeft • Hoe je stapelt zonder risico op schuiven of omvallen

Lees ook: Zo voorkom je droger-ergernis nummer 1 (inderdaad, in elkaar gedraaid wasgoed!)

Kan elke droger op elke wasmachine?

In principe kun je bijna elke vrijstaande droger op een vrijstaande wasmachine zetten, zolang de droger maar lichter is dan de wasmachine. Dat is belangrijk, want de wasmachine is het apparaat dat trilt en beweegt. De droger moet dus altijd bovenop, nooit andersom. Let ook op het formaat: de droger mag niet breder of dieper zijn dan de wasmachine. Dan ontstaat er overhang, en dat maakt de opstelling instabiel.

Controleer in de handleiding of het merk of type specifieke eisen stelt aan stapelen. Sommige fabrikanten bieden alleen stapelkits aan voor apparaten van hetzelfde merk. In veel gevallen zijn er echter ook universele oplossingen beschikbaar.

De vloer: stevig, vlak en trillingsbestendig

De ondergrond waarop de apparaten staan, speelt een grotere rol dan je misschien denkt. Een vloer die veert of ongelijk ligt, kan bij centrifugeren trillingen versterken. Daardoor kan de hele stapelconstructie gaan schuiven. Zeker bij houten vloeren of oudere woningen is het verstandig om dit goed te checken.

Zorg ervoor dat de wasmachine waterpas staat. Bij een scheve opstelling ontstaan er onnodige spanningen op de verbinding tussen de twee apparaten. De meeste machines hebben verstelbare voetjes waarmee je de boel goed kunt afstellen.

Zonder stapelkit is het geen goed idee

Een wasdroger staat niet vanzelf stabiel bovenop een wasmachine. Gebruik daarom altijd een stapelkit. Dit is een verbindingsstuk dat de droger en wasmachine stevig met elkaar koppelt. Je voorkomt hiermee dat de droger tijdens het centrifugeren verschuift of zelfs van de wasmachine af trilt. Sommige fabrikanten noemen dit ook een verbindingsset, maar daarmee wordt hetzelfde bedoeld: een veilige koppeling tussen wasmachine en droger.

Er bestaan merkgebonden en universele stapelkits. Die laatste zijn handig als je apparaten van verschillende merken hebt, maar controleer goed of ze passen op jouw modellen. Sommige stapelkits zijn voorzien van een uitschuifbaar plateau: handig om een wasmand op te zetten bij het in- of uitladen. De (web)winkel waar je je wasdroger koopt, heeft deze kits meestal gewoon in het assortiment, of kan ze voor je bestellen.

Nooit doen: de droger los op de wasmachine zetten met alleen een antislipmatje ertussen. Dat lijkt stevig, maar is niet bestand tegen de schokken van het centrifugeren.

©AK | ID.nl

Trillingsmat: wel of niet nodig?

Een trillingsmat is een dikke rubbermat die je onder de wasmachine legt. Zo'n mat dempt het geluid en voorkomt dat trillingen via de vloer worden doorgegeven. Dit kan vooral nuttig zijn in appartementen of op houten vloeren. Maar let op: een trillingsmat stabiliseert niet de stapel zelf. Het is geen alternatief voor een stapelkit, alleen een aanvullende maatregel.

Gebruik je een trillingsmat, zorg er dan voor dat de wasmachine alsnog waterpas staat. De mat maakt de ondergrond iets zachter, dus nabevestigen kan nodig zijn.

Hoe stapel je veilig?

Begin met een goede voorbereiding. Verwijder het bovenblad van de wasmachine als de stapelkit dat vereist. Plaats de wasmachine waterpas op een schone, vlakke vloer. Bevestig vervolgens de stapelkit zoals aangegeven in de handleiding: meestal met klemmen, schuifsystemen of schroeven.

Til de droger vervolgens met twee personen op de wasmachine. Doe dit via de zijkanten, nooit aan de deur of het bedieningspaneel. Zet de droger precies in het midden van de stapelkit. Controleer of hij goed vastzit en sluit dan pas de stekker aan. Let erop dat het snoer en eventueel een afvoerslang niet klem komen te zitten.

Test daarna de stabiliteit door een kort centrifugeprogramma op de wasmachine te draaien. Blijft de droger goed staan en hoor je geen overmatige trillingen of bewegingen? Dan is de installatie geslaagd.

Wat als stapelen niet kan?

Soms is stapelen geen optie. Bijvoorbeeld omdat de droger groter is dan de wasmachine, de nis te laag is of de vloer te instabiel. In dat geval zit er niets anders op dan de apparaten naast elkaar te plaatsen. Dat vraagt wel wat meer vloeroppervlak, maar tegelijkertijd kun je daarboven juist zorgen voor extra werkruimte. Zet de machines onder een werkblad en je hebt meteen een plek om was op te vouwen, schoon wasgoed te sorteren of handdoeken op te stapelen. Zo benut je de ruimte toch nog slim, ook zonder te stapelen.

©kostikovanata

Tot slot

Een wasdroger op de wasmachine plaatsen is een slimme manier om ruimte te besparen, maar alleen als je het goed aanpakt. De juiste stapelkit, een stevige vloer en een nauwkeurige opstelling maken het verschil tussen een veilige, stabiele combinatie en een risico op schade of ongelukken. Met een beetje voorbereiding staat het binnen een uur stevig en veilig – en houd jij ruimte over in je wasruimte.