Stel je voor:
Ik heb een systeem waarbij clients een proces starten op een server. Dat kan wel 10.000 keer per seconde gebeuren, terwijl het een paar momenten later een stuk rustiger is en slechts 1 maal per 10 seconde een proces wordt gestart.
Dit proces bestaat uit een aantal stappen, bijvoorbeeld:
- Schrijf 'start proces' naar bestand;
- Ontvang bericht;
- Controleer bericht;
- Stuur bericht naar ontvangers;
Iedere keer als het proces wordt gestart wil ik dit dus in een tekstfile laten wegschrijven.
Het afhandelen van het proces gaat synchroon, dus er kunnen meerdere processen tegelijk bezig zijn.
Probleem is dat op een gegeven moment, omdat het zo snel kan gaan, proces 43.573 in het bestand wil gaan schrijven terwijl proces 43.572 nog bezig is met het bestand.
Nou heb ik twee oplossingen:
- lock het bestand, zodat andere processen wachten tot het vrij is
- plaats de opdracht tot schrijven in een queue die 1 voor 1 geleegd wordt.
Nou heb ik eens gekeken naar de Threadpool class, maar deze voert volgens mij de threads daarin nog steeds asynchroon uit, waardoor ik nog steed met locking zit.
Ik kan ook zelf een queue maken, waarbij een snelle timer iedere zoveel miliseconden kijkt of er nieuwe items zijn, en ze dus 1 voor 1 afhandelt. Maar goed, is het zinvol om hier zelf iets vor te maken, of moet ik nog even doorzoeken en is er al zoiets standaard in .Net aanwezig?
Ik heb een systeem waarbij clients een proces starten op een server. Dat kan wel 10.000 keer per seconde gebeuren, terwijl het een paar momenten later een stuk rustiger is en slechts 1 maal per 10 seconde een proces wordt gestart.
Dit proces bestaat uit een aantal stappen, bijvoorbeeld:
- Schrijf 'start proces' naar bestand;
- Ontvang bericht;
- Controleer bericht;
- Stuur bericht naar ontvangers;
Iedere keer als het proces wordt gestart wil ik dit dus in een tekstfile laten wegschrijven.
Het afhandelen van het proces gaat synchroon, dus er kunnen meerdere processen tegelijk bezig zijn.
Probleem is dat op een gegeven moment, omdat het zo snel kan gaan, proces 43.573 in het bestand wil gaan schrijven terwijl proces 43.572 nog bezig is met het bestand.
Nou heb ik twee oplossingen:
- lock het bestand, zodat andere processen wachten tot het vrij is
- plaats de opdracht tot schrijven in een queue die 1 voor 1 geleegd wordt.
Nou heb ik eens gekeken naar de Threadpool class, maar deze voert volgens mij de threads daarin nog steeds asynchroon uit, waardoor ik nog steed met locking zit.
Ik kan ook zelf een queue maken, waarbij een snelle timer iedere zoveel miliseconden kijkt of er nieuwe items zijn, en ze dus 1 voor 1 afhandelt. Maar goed, is het zinvol om hier zelf iets vor te maken, of moet ik nog even doorzoeken en is er al zoiets standaard in .Net aanwezig?