Rööpülesanded jooksevad üksteisest sõltumatult. Kui ühes ülesandes visatakse erand, ei takista see teistel ülesannetel edasi jooksmast. Erandid kogutakse kokku ja jõuavad pealõime.
Vaata seda näidet ühest kasutust programmist, kus iga lõim viskab poole täitmise pealt erandi:
static void Do() { for (int i = 0; i if (i >= 50) throw new OperationCanceledException(); }
static ... Loe edasi
Rööplemine toimub eraldi lõimedes, ja juhtumitel, kui on tarvis ligi pääseda objektile, mis ei ole lõimeturvaline, peaks selle objekti lukustama, aga see võib viia olukorda, kus rööplemisest ei ole mingit tolku, kuna kõik lõimed istuvad ikka ühes järjekorras.
Siin tuleb abiks rööplõimede algväärtustamine, kus igale ülesandele saab luua oma objektid.
Kõige lihtsam näide, kus seda võib vaja ... Loe edasi
LINQ koos oma koondfunktsioonidega on suurepärane asi. Rööpes on sama asi saadaval nime all PLINQ (Parallel LINQ). See kattub suuremas osas jada-LINQiga, seega on see asjaga tuttavale väga lihtne kasutada.
Ainuke küsimus, mis tekib, on see, kuhu kirjutada AsParallel(). Tooksin ühe keerulisema praktilise näite, millega saate katsetada.
Oletame, et meil on sotsiaalvõrgustik, kus igal inimesel ... Loe edasi
Eelmises blogis vaatlesime, kuidas rööpe sektsioonimisega võib ehitada jadakoodi sektsioone ja piirata rööbete arvu. Tegelikult on .NETis olemas ka spetsiaalsed parameetrid.
double[] values = new double[10000];
Listint> threadids = new Listint>();
values.AsParallel().WithDegreeOfParallelism(5).ForAll(value =>
{
int id = ... Loe edasi
Väikese ressursinõudlusega rööpsilmuste puhul võib tekkida probleem, kus rööbete käivitamisele kulub rohkem auru kui on kasu nende tööst. Selle probleemi vältimiseks võimaldab rööp-C# rööbete sektsioonimist (inglise keeles partitioning).
Sektsioonimiseks tuleb teha using System.Collections.Concurrent.
Vaata alltoodud näidet, kus on kõrvutatud 3 varianti ruutjuure võtmiseks:
static void ... Loe edasi