Nu de multi-core processors gemeengoed zijn geworden merk ik dat ik zelf ook meer en meer met threads werk.
Nu zijn threads erg krachtige hulpmiddelen, maar kunnen ze ook tot (heel) veel problemen leiden.
Buiten de standaard problemen als deadlocks, starvation en dergelijke, brengen threads ook overhead met zich mee. Het is deze overhead die ik graag aan wil pakken.
Als je een situatie hebt waarbij er veel threads aan het vechten zijn om een stukje cpu, ontstaat bijvoorbeeld door context switching, de situatie waarbij het behaalde rendement terugloopt.
Om dit probleem tegen te gaan heb ik een thread-pooling architectuur bedacht die ik graag eens tegen het licht zou houden.
Mijn opzet is om een generieke oplossing te maken die voor de meeste multithreading oplossingen inzetbaar is.
Ik wil mij in principe richten op de x86 architectuur, het moet werken onder windows, linux en osx.
de opzet:
De main thread start een scheduling thread, deze draait in principe op dezelfde affiniteit als de main thread.
De scheduling thread start, afhankelijk van het aantal beschikbare cores en eventueel afhankelijk van zaken als hyperthreading, een aantal threads en stelt hun affiniteit in. (lukt dit cross-platform?)
Deze thread blijft door alle jobs heen loopen en kijkt welke job de laagste nice-waarde heeft.
Als er threads vrij zijn (geen job aan het runnen) dan worden de jobs met de laagste nice-waarde aan de vrije threads toegekend. Een nice waarde van 1 betekend dat een job niet ingepland wordt.
De jobs hebben dus een nice-value, die loopt van [0,1]. Deze nice waarde hangt bijvoorbeeld af van hoeverre een bepaalde buffer gevuld is.
Elke job heeft een 'run' functie, deze moet er in principe voor zorgen dat de nice waarde oploopt.
Een job kan niet onderbroken worden zodra deze aan een thread is toegewezen.
De threads worden dus door de scheduling thread beheerd en kunnen één job per keer uitvoeren.
graag hoor ik jullie op- of aanmerkingen over deze opzet.
Ik wil in principe pthread gaan gebruiken voor de onderliggende thread functies. Mocht dit idee tot uitvoer komen dan wordt het natuurlijk gewoon open source beschikbaar
Nu zijn threads erg krachtige hulpmiddelen, maar kunnen ze ook tot (heel) veel problemen leiden.
Buiten de standaard problemen als deadlocks, starvation en dergelijke, brengen threads ook overhead met zich mee. Het is deze overhead die ik graag aan wil pakken.
Als je een situatie hebt waarbij er veel threads aan het vechten zijn om een stukje cpu, ontstaat bijvoorbeeld door context switching, de situatie waarbij het behaalde rendement terugloopt.
Om dit probleem tegen te gaan heb ik een thread-pooling architectuur bedacht die ik graag eens tegen het licht zou houden.
Mijn opzet is om een generieke oplossing te maken die voor de meeste multithreading oplossingen inzetbaar is.
Ik wil mij in principe richten op de x86 architectuur, het moet werken onder windows, linux en osx.
de opzet:
De main thread start een scheduling thread, deze draait in principe op dezelfde affiniteit als de main thread.
De scheduling thread start, afhankelijk van het aantal beschikbare cores en eventueel afhankelijk van zaken als hyperthreading, een aantal threads en stelt hun affiniteit in. (lukt dit cross-platform?)
Deze thread blijft door alle jobs heen loopen en kijkt welke job de laagste nice-waarde heeft.
Als er threads vrij zijn (geen job aan het runnen) dan worden de jobs met de laagste nice-waarde aan de vrije threads toegekend. Een nice waarde van 1 betekend dat een job niet ingepland wordt.
De jobs hebben dus een nice-value, die loopt van [0,1]. Deze nice waarde hangt bijvoorbeeld af van hoeverre een bepaalde buffer gevuld is.
Elke job heeft een 'run' functie, deze moet er in principe voor zorgen dat de nice waarde oploopt.
Een job kan niet onderbroken worden zodra deze aan een thread is toegewezen.
De threads worden dus door de scheduling thread beheerd en kunnen één job per keer uitvoeren.
graag hoor ik jullie op- of aanmerkingen over deze opzet.
Ik wil in principe pthread gaan gebruiken voor de onderliggende thread functies. Mocht dit idee tot uitvoer komen dan wordt het natuurlijk gewoon open source beschikbaar
oprecht vertrouwen wordt nooit geschaad