14. februar 2005 - 12:59Der er
13 kommentarer og 1 løsning
Observing Lists
Forstil jer man har et meget tids kritisk system som består af en liste med en masse jobs som hver indeholder en tid hvor der skal ske noget med dette job. Nogen herinde der har et godt løsnings forslag. Er en timer der kigger i listen hver x millisecs nok? Eller er der bedre metoder?
Jo det kan den men spørgsmålet er hvorvidt den er brugbar i et system som er meget tids/drifts kritisk. Der findes en masse realtime design patterns har bare desværre ikke erfaring med hvilke der er gode. Der er jo isuses som deadlocks osv, og tasks skulle gerne være ude præcis det millisekund hvor den er sat til. Timers er jo så vidt jeg ved ikke super præcise. Specielt ikke hvis der bliver fyret en hel bunke af effter hianden. Men måske det er vejen frem. Søger lidt nogen som har prøvet det her før og måske har lidt erfaring de kan give af sig.
Jeg har ikke så meget forstand op real time systemer.
Umiddelbart ville jeg tro at Microsoft havde lavet Timer så god som den nu kunne laves givet det underliggende operativ system og hardware (Windows på x86).
Det kan sagtens være du har ret jeg ved det faktisk ikke. Jeg kan ikke selv se nogle alternativer til en timer andet en noget meget processor krævende whiles osv. Men ville lige høre om der var andre syn på sagen. Arne har du selv lavet løsninger med noget observer der tjekker en liste eller lignende igennem hele tiden og tjekker på nogle kreteria? Hvis et kriteria er der skal se noget 16.00 så skal det virkelig være meget tæt på.
Prøv først sætte et krav op.. hvor præcist skal det kunne være? Og hvornår skal tiden måles fra? (Når tråden/programmet begynder opgaven kl. 16:00:00 - eller skal opgaven være færdig kl. 16:00:00) Hvad er konsekvensen hvis det bliver kørt +/- 100 ms, 1 sec eller 2 sec ?
Derefter kan du jo prøve at lave et simpelt system der henter næste job, ser hvor længe der er til, og derefter kalder Thread.Sleep() eller brugeren timeren, til at "dvale" indtil det er nødvendigt at vågne op. Hvorefter den kan udføre jobbet og gøre samme procedure igen.
Det var også noget i den kaliber jeg selv kunne tænke mig til. men kunne være .NET tilbød noget til sådan opgaver. Tænkte lidt COM+ med object pooling osv. måske man kunne vinde noget med det. men kan godt være jeg gør det mere avanceret end det er.
Ved ikke hvor meget i dybden jeg må gå med det men lad mig sige at vigtigheden er MEGET stor. Med dette menes et job må ikke blive forsinket eller ikke blive sendt af sted. Det ville mildest talt være meget uheldigt.
Men kort fortalt har vi nogle beskeder der skal sendes ud. De ligger i en liste hvor der står et tidspunkt hvorpå de udsendes i en liste af en eller anden art. Så i bund og grund er det rimeligt simpelt men det skal bare være meget præcist og en timer må ik pludselig være "væk". Kan i begge lige smide et svar. Er glad for i gider komme med jeres syn på sagen.
Ser ud som om timeren er en anelse mere upræcis end en while med en sleep i. Tak for hjælpen.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.