G‘afarov, A. F. Galimyanov parallel hisobiyotlar qo'llanma Qozon


Download 1.46 Mb.
bet54/85
Sana24.12.2022
Hajmi1.46 Mb.
#1062519
1   ...   50   51   52   53   54   55   56   57   ...   85
Bog'liq
ParVychGafGal (1)

IsCancellationRequested har bir iteratsiya davomida yana tekshiriladi. Agar


rost, xabar ko'rsatiladi va tsikl tugaydi. Kodni ishga tushirishga harakat qiling

va Enter tugmasini bosishdan oldin bir nechta iteratsiyalarni bajarishga ruxsat bering , shuning uchun


vazifani bekor qiling.




statik bo'shliq Main()


{
87

Machine Translated by Google
var tokenSource = new CancellationTokenSource(); var token = tokenSource.Token;
var task = new Task(() => DoLongRunningTask(token), token);


Console.WriteLine("Bekor qilish uchun Enter tugmasini bosing");


task.Start(); Console.ReadLine(); tokenSource.Cancel(); task.Wait(); task.Dispose();
Console.WriteLine("Chiqish uchun Enter tugmasini bosing");


Console.ReadLine();
}
statik bekor DoLongRunningTask (CancellationToken tokeni)
{


agar (token.IsCancellationRequested)
{


Console.WriteLine("Uzoq davom etadigan vazifa boshlanishidan oldin bekor qilindi");


qaytish;


}


uchun (int i = 0; i <= 100; i++)
{


Console.WriteLine("{0}%", i); Thread.Sleep(1000);
agar (token.IsCancellationRequested)
{


Console.WriteLine("Bekor qilingan");


sindirish;


}
88
Machine Translated by Google
}
}
Ko'p holatlarda siz bir nechta parallel vazifalarni bajarasiz. Qachon

vazifani bekor qilish talab qilinadi, uning o'rniga vazifalar guruhini bekor qilishingiz mumkin


faqat bitta. Bunga bir xil token yordamida erishiladi
guruhdagi har bir vazifa uchun. Agar sizda bir nechta vazifalar guruhlari bo'lsa
bekor qilinishi mumkin, uchun alohida CancellationTokenSource faylidan foydalaning har bir guruh uchun tokenlar yaratish.

      1. Parallel LINQ

Language-Integrated Query (LINQ) deklarativ modelni taqdim etadi,

kabi ma'lumotlar ketma-ketligini so'rash imkonini beradi


xotiradagi to'plamlar, XML hujjatlari va ma'lumotlar bazasi ma'lumotlari. Xarakter ko'p so'rovlar ularni osongina parallellashtirish mumkinligini anglatadi. Ko'pchilik so'rovlar har bir element uchun bir xil harakatlar guruhini bajaradi


to'plamlar. Agar bu harakatlarning barchasi mustaqil bo'lsa, nojo'ya ta'sirlarsiz ular paydo bo'lish tartibi sabab ta'sir, siz tez-tez mumkin
Ishni taqsimlash orqali mehnat unumdorligining katta o'sishiga erishing

bir nechta protsessor yadrolari o'rtasida.


Ushbu stsenariylarni qo'llab-quvvatlash uchun .NET Framework versiyasi 4.0


Parallel LINQ (PLINQ) joriy etildi . PLINQ bir xil standartni taqdim etadi LINQ kabi so'rov operatorlari va so'rovlar ifodasi sintaksisi . Asosiy Farqi shundaki, dastlabki ma'lumotlar qismlarga bo'linishi mumkin
ma'lumotlarni parchalash yordamida. Bu kichikroq ma'lumotlar guruhlari keyin potentsial ravishda barcha mavjud CPU yadrolari tomonidan qayta ishlanadi. PLINQ mavjud ba'zi cheklovlar, bu to'g'ridan-to'g'ri almashtirish emasligini anglatadi
LINQ va so'rovlar uchun standart variant bo'lishi mumkin emas. uchun kalit
cheklashlar soni individual qayta ishlash yon ta'siri, deb hisoblanadi qayta ishlash natijasi kabi manba ketma-ketliklaridan elementlar
bir element boshqasiga bog'liq bo'lib, oldindan aytib bo'lmaydigan narsaga olib kelishi mumkin
89
Machine Translated by Google
natijalar. Buning sababi, asl elementlar odatda yo'q asl tartibda qayta ishlanadi. Ikkinchi cheklov - bu
PLINQ xotiradagi ma'lumotlar uchun parallellikni ta'minlaydi, masalan to'plamlar yoki oldindan yuklangan XML.
LINQ so'rovini parallel uchun qanday o'zgartirish mumkinligini ko'rsatish
qayta ishlash uchun sizga birinchi navbatda seriyali versiya kerak bo'ladi. Quyidagi kodda
juda oddiy so'rovni ko'rsatadi. Bu erda biz o'z ichiga olgan massivdan boshlaymiz birdan o'ngacha bo'lgan butun sonlar. Select iborasidan foydalanib , loyihalashtiramiz
uni asl kvadratlarni o'z ichiga olgan yangi ketma-ketlikka aylantiring

qiymatlar. LINQ kechiktirilgan bajarishdan foydalanganligi sababli, yangi ma'lumotlar bo'lmaguncha ketma-ketlik yaratilmaydi


mavjud. Bu foreach sikli so'rovning bajarilishiga sabab bo'lishini anglatadi va

natijalarni chiqaradi.




int[] ketma-ketligi = Enumerable.Range(1, 10).ToArray();
var kvadratlar = sequence.Select(x => x * x);
foreach (kvadratdagi var kvadrat)
{


Console.Write(kvadrat + " ");
}


Console.ReadLine();

Natija: 1 4 9 16 25 36 49 64 81 100


LINQ interfeysni amalga oshiradigan ketma-ketliklar bilan ishlaydi




IEnumerable. PLINQ dan foydalanmoqchi ekanligimizni ko'rsatish uchun biz



kerak
statikdan foydalaning

Download 1.46 Mb.

Do'stlaringiz bilan baham:
1   ...   50   51   52   53   54   55   56   57   ...   85




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