4.5 - Threading Issues (p.168)
De fork() en Exec() System Calls zijn op sommige systemen verschillend geimplementeerd.
- Als exec() wordt gecalled wanneer het nieuwe process is gestard worden niet alle threads gekopieerd. *UNIX versies hebben verschillende implementaties voor deze commandos.
Thread Cancellation
- Wanneer threads niet langer nodig zijn kunnen ze worden gestopt door een andere thread op de volgende manieren:
- Asynchronous Cancellation = Abrupt stoppen van de thread.
- Deferred Cancellation = De thread controleert op gezette momenten in de code of het moet stoppen. Hierdoor kan de thread zich goed afsluiten.
- Wanneer threads niet langer nodig zijn kunnen ze worden gestopt door een andere thread op de volgende manieren:
Signal Handeling
- Signal = Een methode om een process te melden dat een bepaald evement is gebeurd.
- Aan welke thread in het process moet het signal worden afgeleverd?:
- De thread waar het signaal over gaat.
- Alle threads in het process.
- Sommige threads in het process.
- Een thread die alle signalen voor het process ontvangt.
- Windows ondersteund dit niet, maar APC (Asynchronous Procedure Calls) kunnen dit emuleren. Het is alleen mogelijk om te verzenden aan threads.
Thread Pools
- Thread Pool = Een aantal threads worden aangemaakt wanneer een proces start, en een thread wordt aan een taak van een process toegewezen wanneer dit nodig is. Wanneer de threads "op" zijn moet het process wachten tot er weer een vrije thread beschikbaar is in de pool.
- De aangemaakte threads sleep totdat ze nodig zijn.
- Voordelen:
- Het gebruiken van een wachtende bestaande thread is sneller dan het aanmaken van een nieuwe thread.
- Het aantal threads wat kan bestaan in een process wordt gelimiteerd. Dit is goed voor systemen die niet kunnen omgaan met veel threads.
- Het maximum aantal threads in een pool wordt bepaald door het het aantal CPUs, verwachte aantal clienten en de gebruikde archtectuur.