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
Windows 11 installeren zonder Microsoft-account? Zo omzeil je de blokkade
© MG | ID.nl
Huis

Windows 11 installeren zonder Microsoft-account? Zo omzeil je de blokkade

Wanneer je Windows 11 (opnieuw) installeert, vereist Microsoft dat je je aanmeldt met een Microsoft-account of dat je er eentje aanmaakt. En dat terwijl je je voorheen in Windows 10 gewoon met een offline account kunt aanmelden. Wij laten je zien hoe je dat ook in Windows 11 doet, rechtstreeks tijdens de installatieprocedure.

Microsoft wil maar al te graag dat je een Microsoft-account hebt en deze ook gebruikt bij het aanmelden van Windows 11. Behalve dat je hiermee in geval van het vergeten van je installatiecode het besturingssysteem makkelijker opnieuw kunt activeren, biedt een Microsoft-account niet heel veel extra voordelen in Windows 11 zelf. Het enige wat met zo'n account makkelijker gaat is het instellen van e-mail en OneDrive, maar dat zijn ook diensten waar je je later bij kunt aanmelden.

Installatieprocedure

In een van de laatste stappen van de installatieprocedure, of wanneer je een Windows 11-laptop hebt gekocht, word je - om de laatste instellingen toe te passen - gevraagd om in te loggen bij een Microsoft-account, of er eentje aan te maken.

©MG | ID.nl

Microsoft vraagt in Windows 11 standaard om een Microsoft-account.

Wanneer je in bovenstaand scherm bent aangekomen, lijkt het alsof je hier niet meer uit kunt komen: je moet óf een account invullen, óf er eentje aanmaken, óf een stap terug gaan met de pijl rechtsboven in beeld. Toch kun je hier nog iets anders doen, namelijk een opdrachtprompt openen. En dat is handig, want met een opdrachtprompt tijdens de installatie van Windows 11 kun je alvast dingen regelen voordat Windows 11 zelf is opgestart. Het omzeilen van het aanmaken of invoeren van een Microsoft-account bijvoorbeeld. Om de opdrachtprompt te openen, moet je de volgende toetscombinatie intypen:

Shift+F10

Let op: bij sommige computers zoals laptops kan het zijn dat je ook de Functietoets Fn moet indrukken om de F10-knop te kunnen gebruiken. De opdracht wordt in dat geval dan:

Shift+Fn+F10

Na het indrukken van deze toetscombinatie wordt een zwart venster voor de opdrachtprompt geopend.

©MG | ID.nl

Via een opdrachtprompt tijdens de installatieproductie van Windows 11 kunnen we de blokkade voor het aanmaken van een gewoon account omzeilen.

In dit scherm voor je een speciale opdracht in waarmee we de verplichte invoer voor een Microsoft-account gaan omzeilen. Zodra Windows 11 heeft gedetecteerd dat jouw computer een werkende verbinding heeft, blijf je op dat accountscherm hangen, maar ook wanneer er nog geen verbinding is gemaakt, wil Microsoft toch eerst dat je verbinding maakt en daarna alsnog met een Microsoft-account aan de slag gaat.

Nu de opdrachtprompt is geopend, schakelen we die online functie uit. Voer exact de volgende opdracht in:

start ms-cxh:localonly

Gevolgd door een druk op de Enter-toets. Dat zit eruit als hieronder:

©MG | ID.nl

Met behulp van de opdracht start ms-cxh:localonly kunnen we toch een normaal account.

Nadat je op Enter hebt gedrukt, verschijnt er een nieuw venster met de mogelijkheid om een lokaal account (dus zonder Microsoft-account) aan te maken. Goed om te weten: dit account is ook meteen een administrator-account.

©MG | ID.nl

Je kunt iedere accountnaam gebruiken die je wenst, en een wachtwoord opgeven hoeft nu nog niet.

Je kunt hier dus gewoon een normale (voor- en achter)naam opgeven, een e-mailadres is dan niet nodig. Je kunt ervoor kiezen om nu een wachtwoord in te vullen, maar als je dat doet, krijg je ook direct drie controlevragen die je moet opgeven; dat kun je niet skippen. Sla je het aanmaken van een wachtwoord nu over, dan kun je dat later in Windows 11 alsnog doen.

Nadat je de benodigde gegevens hebt ingevuld, worden de laatste installatiestappen voltooid, en wordt de computer nog een keertje opnieuw opgestart. Daarna kun je je aanmelden met het nieuwe account en voer je nog een aantal stappen uit met betrekking tot functies als locatie, diagnostische gegevens en handschriftherkenning.

Account aanpassen

Het account waarmee je je aanmeldt is een administrator-account. In dat geval doe je er goed aan om een wachtwoord in te stellen als je dat nog niet hebt gedaan in de hierboven uitgelegde stap. Om een wachtwoord in te stellen, klik je op de Startknop, en vervolgens op je accountnaam en kies je voor Mijn account beheren.

©MG | ID.nl

Via het Startmenu vraag je de eigenschappen van je account op.

Je komt nu in het instellingenscherm terecht voor je account. Scroll naar de knop Aanmeldingsopties en daarna op Wachtwoord.

©MG | ID.nl

Klik op het onderdeel Wachtwoord om een wachtwoord toe te voegen aan je account.

Nu kun je een wachtwoord naar wens opgeven, de eisen zijn hier niet streng, maar uiteraard kies je wel voor een lastig te raden wachtwoord. Wel ben je verplicht om een geheugensteuntje op te geven, maar dat is minder lastig dan drie extra beveiligingsvragen die je normaliter bij het installatiescherm moet opgeven. Bij de geheugensteun mag het wachtwoord (vanzelfsprekend) niet gebruikt worden .

©MG | ID.nl

Hier geef je je wachtwoord op. De wachtwoordhint (geheugensteun) mag niet ook je wachtwoord.

Wachtwoord en geheugensteun ingevoerd? Dan ben je in principe klaar en kun je je systeem verder gaan configureren. Eventueel kun je nu ook nieuwe extra accounts aanmaken via het onderdeel Andere gebruikers in het instellingenscherm.

▼ Volgende artikel
Wat is doomscrolling en hoe kom je ervan af?
© AK | ID.nl
Huis

Wat is doomscrolling en hoe kom je ervan af?

Je pakt je telefoon om even snel iets te bekijken – en ineens ben je zomaar een uur verder, omdat je niet kon stoppen met scrollen. En onderweg ben je meestal niet blijven hangen bij blije kattenfilmpjes, maar bij rampen, slecht nieuws en roddel. Of bij posts van mensen die allemaal mooier of rijker lijken dan jij. Doomscrolling dus. Slecht voor je humeur en zelfbeeld én zonde van je tijd. Maar gelukkig kun je er iets tegen doen.

In dit artikel lees je:

☠️ Wat doomscrolling is ☠️ Waarom je maar blijft scrollen ☠️ Hoe je weet of jij een doomscroller bent ☠️ Wat je tegen doomscrollen kunt doen

Lees ook: Minder afleiding van je telefoon met deze 6 apps

Wat is doomscrolling?

Doomscrolling is eindeloos blijven scrollen door berichten, filmpjes en posts die je eigenlijk alleen maar onrustig maken. Dat begon ooit met nieuws, maar geldt tegenwoordig ook voor sociale media. Denk aan TikTok, Instagram of X waar je urenlang blijft scrollen, maar waar je zelden wijzer of rustiger van wordt. Het algoritme weet precies wat je aandacht trekt – en hoe het je blijft vasthouden.

De term ontstond rond 2020, tijdens de COVID-19-pandemie, toen mensen massaal thuis zaten en constant updates zochten over het virus. Maar het fenomeen heeft zich sindsdien uitgebreid naar alle vormen van nieuws of posts waar je je slechter van gaat voelen.

Waarom blijven we scrollen?

Apps zijn zo ontworpen dat ze je aandacht vasthouden. Elke swipe of nieuwe video geeft een kleine prikkel in je brein: een signaal dat er misschien iets interessants komt. Soms zit er iets tussen dat écht boeit, maar vaak blijft het bij vluchtige prikkels. Ondertussen raakt je hoofd vol, maar je krijgt er weinig voor terug.

Hoe weet je of je doomscrollt?

Er bestaat geen test waarmee je kunt checken of je een doemscroller bent. Maar er zijn wel duidelijke signalen. Je zit in de gevarenzone wanneer je:

🚩 Gedachteloos nieuws- of socialmedia-apps opent, vaak meerdere keren per dag
🚩 Je daarna leeg, onrustig of somber voelt
🚩 Moeite hebt om te stoppen, terwijl je eigenlijk wel weet dat het nergens toe leidt
🚩 's Avonds of 's ochtends lang op je telefoon zit zonder duidelijk doel
🚩 Niet toekomt aan andere dingen, of je gejaagd voelt als je niets checkt

Herkenbaar? Dan is het tijd om je scrollgedrag te doorbreken. Dat is niet makkelijk, maar het kan wel. Onderstaande tips helpen je op weg.

©Gorodenkoff

Wat kun je doen tegen doomscrolling?

1. Beperk je schermtijd en las schermvrije tijdstippen in

Geef jezelf vaste momenten waarop je iets mag checken. Bijvoorbeeld: 's ochtends 15 minuten nieuws, 's avonds 10 minuten social media. Stel een timer in, zodat je niet ongemerkt blijft hangen. Je kunt ook met jezelf afspreken dat je bijvoorbeeld één uur per dag niet op je scherm kijkt. Of in het weekend pas na twaalf uur 's middags je telefoon pakt. Ook is het mogelijk om tijdslimieten in te stellen voor bepaalde apps. Hieronder lees je hoe je dat doet op een iPhone en op een Android-toestel.

Scherm- en apptijd beperken op iPhone

Wil je op vaste tijden niet gestoord worden? Stel dan apparaatvrije tijd in op je iPhone. Tijdens die periodes zijn alleen telefoongesprekken, berichten en apps die je zelf toestaat beschikbaar. Ga naar Instellingen > Schermtijd, tik op App- en websiteactiviteit en schakel dit in als dat nog niet gebeurd is. Kies daarna voor Apparaatvrije tijd en stel via Gepland de begin- en eindtijd in. Je kunt kiezen voor elke dag hetzelfde tijdstip of per dag variëren. Vlak voor de ingestelde tijd krijg je een herinnering.

Ook kun je tijdslimieten instellen voor apps of hele categorieën, zoals sociale netwerken of games. Ga naar Instellingen > Schermtijd > Applimieten > Voeg limiet toe en selecteer de gewenste apps of categorieën. Tik op Volgende, stel de limiet in en gebruik eventueel Pas dagen aan voor verschillende limieten per dag. Rond af met Voeg toe.

Scherm- en apptijd beperken op je Android-telefoon

Rustmomenten op je Android-toestel stel je in via de Bedtijdmodus. Tijdens deze periodes worden je schermkleuren aangepast (bijvoorbeeld naar grijstinten) en kun je meldingen dempen of het scherm automatisch laten uitschakelen. Ga naar Instellingen > Digitaal welzijn en ouderlijk toezicht > Bedtijdmodus en stel in wanneer de modus moet starten en eindigen. Je kunt dit voor elke dag apart instellen of een vast schema kiezen.

Wil je appgebruik beperken? Ga dan naar Digitaal welzijn > Dashboard en kies de app die je wilt beperken. Tik op het zandlopertje naast de app en stel een dagelijkse limiet in. Zodra de limiet is bereikt, is de app de rest van die dag niet meer toegankelijk.

2. Zet meldingen uit

Pushmeldingen van nieuwsapps, sociale media of video-apps zorgen dat je telkens toch weer gaat kijken en scrollen. Zet ze uit. Wat je niet ziet, open je ook minder snel.

3. Richt je telefoon prikkelarmer in

Zet socialmedia- en nieuwsapps niet op je beginscherm. Of verwijder ze helemaal. Wil je ze toch echt bezoeken, dan kan dat via de browser. Dat is een extra handeling vergeleken met een app, maar juist daarom doe je het misschien minder vaak.  

Verder kun je er ook voor kiezen om de grijstintenmodus in te schakelen. Dat zorgt voor minder afleiding en een beeld dat rustiger is.

Op een iPhone ga je hiervoor naar Instellingen > Toegankelijkheid > Weergave en tekstgrootte > Kleurfilters en schakel je de optie in. Op een Android-smartphone ga je hiervoor naar Instellingen -> Toegankelijkheid -> Kleurfilters. Hier schakel je de optie Grijstinten in. Afhankelijk van je toestel kunnen deze menu-opties een iets andere naam hebben.

©ID.nl

4. Volg niet alles en iedereen

Kies één of twee betrouwbare nieuwsbronnen. Ontvolg accounts die vooral onrust of negativiteit brengen. Kies liever voor mensen of media die je inspireren, informeren of aan het denken zetten. Een account waar je geen energie van krijgt, maar dat je energie kost: dat kun je beter ontvolgen.

Stoppen met doom-scrolling? Het kan!

Doomscrolling gaat allang niet meer alleen over nieuws. Ook gedachteloos scrollen langs filmpjes, reacties of meningen op sociale media hoort erbij. Het lijkt onschuldig, maar kost tijd, energie en aandacht — en levert weinig op.

Het goede nieuws: je kunt ermee stoppen. Niet in één keer, maar stap voor stap. Door bewuster te kiezen wat je leest en wanneer. Door je telefoon minder het ritme van je dag te laten bepalen. En door ruimte te maken voor dingen die je echt iets opleveren.

📵 Verveel je je zonder smartphone?

📘 Door een boek kun je urenlang scrollen!