Fizika-matematika fakulteti amaliy matematika va informatika


C# dasturlash tilida parallel kolleksiyalar bilan ishlash


Download 435.43 Kb.
bet5/11
Sana19.06.2023
Hajmi435.43 Kb.
#1619455
1   2   3   4   5   6   7   8   9   10   11
Bog'liq
Otaboyev Mashrabjon dasturlash kurs ishi 25 06

1.3C# dasturlash tilida parallel kolleksiyalar bilan ishlash.


Integrated Query (LINQ) deklarativ modelni taqdim etadi,kabi ma'lumotlar ketma-ketligini so'rashga imkon beradi.Xarakter Ko'p so'rovlar ularni osongina parallellashtirish mumkinligini anglatadi. Ko'pchilik so'rovlar har bir element uchun bir xil harakatlar guruhini bajaradi. Agar ushbu harakatlarning barchasi mustaqil bo'lsa, nojo'ya ta'sirlarsiz Ko'pincha siz ularni paydo bo'lish tartibidan kelib chiqadigan effektlarni ko'rishingiz mumkin .Asosiy farq dastlabki ma'lumotlarni qismlarga bo'lish mumkin ma'lumotlarning dekompozitsiyasidan foydalanishda bo’ladi. Bu kichik ma'lumotlar guruhlari potentsial barcha mavjud CPU yadrolari tomonidan boshqariladi. Plinq bor bu to'g'ridan-to'g'ri almashtirish emasligini anglatuvchi ba'zi cheklovlar LINQ so'rovlar uchun standart parametr bo'lolmaydi. Kalit Cheklovlar soni individualni qayta ishlashning yon ta'siri manba ketma-ketligidagi elementlar, masalan, ishlov berish natijasida Bir elementning boshqasiga bog'liqligi oldindan aytib bo'lmaydigan 90 ga olib kelishi mumkin. Buning sababi asl elementlar odatda yo'q asl tartibda ishlov beriladi. Ikkinchi cheklov PLINQ xotira ichidagi ma'lumotlarga o'xshashlikni ta'minlaydi. LINQ so'rovini parallel ravishda qanday o'zgartirish mumkinligini ko'rsatish ishlov berish, avval siz seriya versiyasini olishingiz kerak. LINQ kechiktirilgan ijrodan foydalanganligi sababli, yangi ma'lumotlar bo'lguncha ketma-ketlik hosil bo'lmaydi. Bu shuni anglatadiki, oldingi tsikl so'rovni bajarishga majbur qiladi va natijalarni ko'rsatadi.
int [] ketma-ketlik = Sanoqli. Range (1, 10) .ToArray ();
var kvadratchalar = ketma-ketlik. Tanlang (x => x * x);
oldindan belgilash (kvadratlar ichida kvadrat)
{
Consol .Write (kvadrat "" ");

}
Console.ReadLine ();


Natija: 1 4 9 16 25 36 49 64 81 100
LINQ interfeysni amalga oshiradigan ketma-ketliklar bilan ishlaydi Sanab bo'lmaydigan . PLINQ-dan foydalanishni xohlayotganimizni ko'rsatish uchun biz statik AsParallel usuldan foydalanishi kerak. Bu usul IEnumerable kengaytmasi, shuning uchun uni har qanday narsaga qo'llash mumkin. LINQ operatsiyalarini qo'llab-quvvatlaydigan ketma-ketlik. U ob'ektni qaytaradi
ParallelQuery turini kiriting. Agar parallel ketma-ketlik bo'lsa
ma'lumotlar, siz uni LINQ operatsiyalari uchun manba sifatida foydalanishingiz mumkin, har qanday boshqa ketma-ketlikda bo'lgani kabi. PLINQ bu kabi ma'lumotlarni ajratadi samarali parallel ishlov berishni ta'minlash usuli. So'rovni parallellashtirish uchun qo'ng'iroqni ko'rsatilganidek AsParallel qo'shing quyida:
var kvadratchalar = ketma-ketlik.AsParallel (). Tanlang (x => x * x);
Natija: 100 1 25 36 49 64 81 4 9 16
PLINQ so'rovi natijalari to'g'ri ekanligini payqagan bo'lishingiz mumkin, ammo ular ketma-ketlikni ishlatishdan ko'ra boshqa tartibda paydo bo'ldi LINQ versiyasi. Bu parallel ravishda ishlaydigan so'rovlarning qo'shimcha mahsuloti. LINQ Ba'zi hollarda natijalarni buyurtma qilish muhim emas, ayniqsa, agar ma'lumotlar keyinchalik saralangan bo'lsa standart buyurtma operatori yordamida OrderBy yoki ba'zilari imperativ usul. Boshqa hollarda, asl nusxani buzish buyurtma halokatli bo'lishi mumkin. Bunday vaziyatlarda sizga kerak kirish tartibiga muvofiq natijalar tartibini saqlash. Plinq parallel ravishda ma'lumotlar manbai tartibini saqlashni qo'llab-quvvatlaydi AsOrdered usuli yordamida. Ushbu usul faqat ishlatilishi kerak. natijalar tartibini saqlash kerak bo'lganda, bu mumkin
so'rovlaringizni sezilarli darajada pasaytiradi. Quyidagi so'rov AsParallel-dan keyin AsOrdered usulidan foydalanadi natijalar tartibini ta'minlash.
var kvadratchalar = ketma-ketlik.AsParallel (). AsOrdered () ni tanlang (x => x * x);
Natija: 1 4 9 16 25 36 49 64 81 100
LINQ yordamida ketma-ket so'rovni bajarganingizda, har qanday qayta ishlangan ma'lumotlar elementi istisnoga olib kelishi mumkin. Qachon istisno bekor qilinadi, so'rov darhol bajarilishini to'xtatadi. PLINQ bir vaqtning o'zida bir nechta operatsiyalarni bajarishi mumkin.
Ushbu misol PLINQ-dan 1 dan 10000 gacha bo'lgan juft sonlarni hisoblashda qanday ishlatilishini ko'rsatadi. Bir nechta iplardan foydalangan holda 10000. E'tibor bering, natijada ro'yxat buyurtma qilinmaydi!
var ketma-ketligi = Enumable.Range (1, 10000);
var evenNumbers = ketma-ketlik.AsParallel ()
. (Qayerda (x => x% 2 == 0)
.To‘plam ();
// evenNumbers = {4, 26, 28, 30, ...}
// Buyurtma har xil versiyalarda o'zgaradi
DegreeOfParallelism bilan
Parallellik darajasi - bajariladigan vazifalarning maksimal bajarilish soni
so'rovni qayta ishlash uchun ishlatiladi.
var ketma-ketligi = Enumable.Range (1, 10000);
var evenNumbers = ketma-ketlik.AsParallel ()
Paralellik darajasi bilan. (4)
.Qaerda (x => x% 2 == 0);
AsOrdered
Ushbu misol PLINQ-dan 1 dan 1 gacha bo'lgan juft sonlarni hisoblashda qanday ishlatilishini ko'rsatadi
Bir nechta iplardan foydalangan holda 10000. Olingan ro'yxatda buyurtma saqlanadi, ammo yodda tuting
AsOrdered ko'plab elementlarning ishlashiga zarar etkazishi mumkin, shuning uchun buyurtma ko'riladi.

// Javadagi ko’rinish

Download 435.43 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   10   11




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling