ПредишенСледващото

В Delphi XE7 включени библиотека за паралелно програмиране. , Просто свържете устройството към използване System.Threading. Да видим какво тази библиотека има и как тя може да се използва.

паралелно програмиране библиотека паралелно програмиране библиотека (ЗОП), работещи на Windows. MacOSX. Android и IOS устройства и позволява на приложенията да работят задачи паралелно, като по този начин използването на предимствата на многопроцесорни устройства или компютри. PPL библиотека ще ви позволи да стартирате задачи, да ги комбинирате, очакваното представяне на група от задачи и др. За всичко това, библиотеката има автоматично регулиране на конец басейн (в зависимост от натоварването на процесора) (виж. TThreadPool клас), които ще ви накарат да забравите за създаване и контрол на потока.

Използването на PPL библиотека можете лесно:

- създаване на линии, използващи TParallel.For дизайн;
- паралелни задачи, като използвате TTask и ITask;
- откажат работещ процес, като се фокусира върху други задачи, и след това да получите резултат от процеса на мястото, на което искате.

Използването TTask

TTask - клас, който ви позволява да стартирате една задача или няколко задачи едновременно. В този случай, не е нужно да създава и управлява потока. TTask клас изпълнява ITask интерфейс. ITask Интерфейсът на ваше разположение има функция да започне (Старт), в очакване (Изчакайте) и отменя (Отказ) задачите и състоянието (Status), ви позволява да знаете какво се случва с тази задача. Тук са възможни състояния на задачи: Създадена (задача е създаден), WaitingToRun (задача е да се чака края на изпълнението на друг процес), бягане (задача се изпълнява), Завършен (задача завършен) WaitingForChildren (задача е да се чака края на изпълнението на дъщерно задача), Отменен (задачата е отменен) Изключение (при възникването на грешката проблем).

Нека сега да видим как да се създават и пускат на задачата. За да направите това, да създадете клас TTask. преминаване на процедурата за клас конструктор да бъде изпълнена в поток, а след това извика функцията Start.

А сега се опитайте да изпълнява множество задачи едновременно. За да направите това, трябва да се създаде набор от проблеми, стартирайте задачата и да чака, когато те се изпълняват. За да се изчака, има две статични функция на клас TTask. WaitForAll (очаква се да изпълнява всички задачи) и WaitForAny (очаква се да се извърши най-малко една задача).

И накрая, още един пример, в който аз ще ви покажа как да достигнете до свойствата и формите на контрол на процедурата за задача, как да проверите състоянието на проблема и как да се отмени неговото изпълнение.

Използването TParallel.For

За статична функция TParallel клас го прави лесно да изпълнява функцията си в паралелна линия. Като пример, помислете за алгоритъм за намиране на прости числа. Функцията, която определя дали даден номер е председател, ще бъде както следва:

Класически бюст масив от числа и отчитане на броя на намерените прости числа ще изглеждат по следния начин:

Направете паралел линия в този случай е възможно операторът да замени TParallel.For функция клас и заместване код цикъл в анонимна функция.

Сега нека видим как да се излезе от омагьосания кръг TParallel.For. Да кажем, че ние трябва да намерим най-малко 1000 прости числа, а след това излезе от омагьосания кръг. Ето как ще ни код.

Използването TTask.IFuture

С помощта на интерфейса IFuture можете да намерите всичко, или да извършва всяка заявка в паралелни, изпълняващи други задачи, и да получите резултат по времето, когато ще трябва да го. Ако в този момент стойността все още не е готова, с искане нишка е блокиран, докато се получи стойността. Това ви позволява да ги подредите по приоритет блокове от код, за да ги изпълни в определен ред, и в същото време да сте сигурни, че ще получите стойност в определен момент.

Да направим един прост пример за използване на IFuture интерфейс. За да започнете, започнете задачата и се опитайте да получите право стойност. Следващият пример спира изпълнението на програмата до план за изпълнение на задачата.

Ето един пример, когато програмата пита за резултата, след като задачата е изпълнена. В този случай, веднага се получава резултата.

управление басейн потоци TThreadPool

Прегледайте текущата инстанция на класа, можете да TThreadPool на имоти TThreadPool.Default клас. които можете да прочетете или който можете да промените минималния и максималния брой на нишки. Как да се направи това е показано в примера.

Трябва ли да използвам библиотеката Delphi паралелно програмиране?

Отговорът на този въпрос е прост: със сигурност си струва. Можете да увеличите производителността на съществуващите приложения, благодарение на басейн нишка самонастройка, че ще се възползва от многоядрени процесори. В допълнение, ако използвате конци, библиотека ЗОП паралелно програмиране ще намали обема на кода и подобри четливостта, което не може да не се радвам. Особено отбележи, лекота на използване и паралелизация на потока линия.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!