Citat:
Ursprungligen postat av
Trillske
Asynkron och parallell är två helt olika saker, och eftersom det står parallellism i topic bör det ju vara det som gäller. Att asynkron är enklare är inget som behöver preciseras, självfallet är det lättare att köra en tråd i taget.
EDIT: jag kanske menar concurrent (vad nu det heter) när jag tänker efter, blir lätt förvirrad när det är svenska.
Det gör det, men då det kombineras med villkoret att låsa en resurs så får du gärna ge en lösning för hur parallellism skulle kunna tillföra något här...
Låser du en resurs för en task i taget får du ju ett sekventiellt utfall per se.
Det du får göra är att dela upp de tasks som kommer in och se om du kan urskilja olika tasks som använder sig av helt oberoende resurser och slussa in dem i olika köer som jag skrev.
Dessa köer kan du då parallellköra mot varandra.
Du kan evt parallellköra varje tasks uppgifter.
Men sköta köerna som delar resurser sker bäst asynkront eller helt sekventiellt.
Och visst det finns metoder som du antyder:
Citat:
* Jag har för mig att MS Task-lib har fullt stöd för parallelism, d.v.s. att det faktiskt delegeras på ett hyfsat sätt på rätt burk utan att man behöver bry sig om det själv. Men citera mig inte.
De (MS) ger en timeout metod för att förhindra deadlocks vill jag minnas...
Det ger ju att du är tvungen att sätta olika timeout tider på ett antal nS för de olika trådarna som bromsar kön vid varje exekvering...
Känns ju inte så vettigt att göra då utfallet likt förbaskat blir sekventiellt och nu med en fördröjning dessutom.
Den vettigaste lösningen är just att designa det hela så det inte uppstår deadlocks över huvud taget.
Och då är det ett sekventiellt utfall från köerna som kommer vare sig TS söker något annat eller ej.
Du kan jobba runt det hela genom att utföra en analys av trafiken och komponera en resurshanterare som har en kö som den betar av asynkront för att förhindra ett stop och deadlocks vid varje task och bara få det vid intervallet av kölängden av resurshanteraren det kan räcka om du har tur men då kan du ju i de flesta fall lika gärna köra all köhantering asynkront redan från början.
I de fall detta funkar är ju ifall varje task har ytterligare uppgifter där deras exekveringstid > än den för den gemensamma resursens tidsåtgång.