јуни 2, 2016

Fork-Join Зачлени се развој на Java ™ SE

Source: http://www.coopsoft.com/ar/ForkJoinArticle.html

Fork-Join Зачлени се за секојдневна, мулти-кор Java ™ апликации

Forking или поделба на обемот на работа на повеќе задачи за паралелно процесирање и се приклучи на резултатите заедно е техника се користи во безброј научни, број Британија апликации. Многу други апликации може да имаат корист од преработка на вилушка се приклучат, но со помош на научен пристап не може да биде во најдобар интерес.

Оваа статија претставува “засрамувачки паралелно” вилушка приклучат пристап кој работи добро за секој ден, мулти-кор апликации во Java ™ SE, ME, како и Андроид. ™ (3000 зборови)

Што е вилушка се придружи?

Мислам на вилушка во патот, каде што секој пат конечно ќе се врати заедно – придружува.

Вилушка-Приклучи паузи барање на неколку делови за паралелно процесирање и се приклучува на резултатите на крајот.

Слика 1: Fork-Приклучи Структура

Fork-Join Structure

Вилушка-Приклучи Структура

Да речеме дека имаат низа на илјада броеви. Ние треба да се направи на постапката за секоја од овие броеви и да додадете на вкупниот број.

Котација 1: Array обработка на

за (int i = 0; i <1000; i ++) {
Вкупно + = doProcedure (низа [i]);
}

Ако постапката трае една секунда (ѕид часовникот) да се заврши, тогаш тоа се случува да се земе илјада секунди (над 16½ минути) да ја заврши оваа задача.

Вилушка-Приклучи можев

одделен (вилушка) на голем спектар на десет низи од сто елементи, секој,
обработува секоја низа на посебен процесорот, и
се приклучат на резултатите кога ќе заврши.
Кој ќе ја преземе сто секунди (нешто повеќе од 1 ½ минути), една десетина од оригиналниот времето. на располагање, толку побрзо резултат на повеќе процесорот.

Тоа е она што научни пресметки е за сите – истовремено обработка humongous количества на податоци на што поголем број на процесорот, како што се достапни. Оваа апстракција наликува на стандарден научен модел на подели-и-освојат.

Поделете-и-Освои е природен парадигма за паралелни алгоритми. По поделба проблем во две или повеќе под-проблеми, методот се решава под-проблеми во паралела. Вообичаено, на под-проблеми се решени рекурзивно а со тоа и следниот чекор јаз дава уште повеќе суб-проблеми за решавање во паралела.

Слика 2: Поделба-и-Освои

Divide and Conquer

Раздели, па владеј

Проблеми со користење на вилушка се приклучи во научните модел за секојдневни апликации

Креирање на задачи не е проблем; тие се само објекти. Проблемот е во голем број на теми за обработка на задачи кога тие задачи треба:

врски
Пристап до далечински услуги (DBMS, пораки, и многу други) бара конекцијата со далечинското услуга. Општо земено, на далечинскиот управувач услуги ги користат конец да се справи со врската, а тоа бара меморија, контекст префрлување, синхронизација и координација. Повеќе врски на услугата, на повеќе ресурси на услугата потреби, а помалку достапни за други задачи во JVM врски. Тоа влијае на секој корисник.

брави
Брави се убиец со високи перформанси. Мртов / живо брави, приоритет на инверзија, глад, convoying и надземни (што оди експоненцијално со должината на листата на чекање задачи) се некои од проблемите на користење на брави.

Semaphores
Повеќе теми кои сакаат дозвола истовремено, на повеќе теми кои мора да чекаат за достапноста дозвола. Со ова се навраќаме на сите проблеми на користење на брави.

кеш кохерентност
Кога повеќе процесори пристап / ажурирање на истата променлива во внатрешноста на кеш линија, (блок од податоци копирани од главната меморија содржи многу области), уредот меморија може да го поништи кеш линија. Тоа не само што го успорува апликација, таа може да влијае на друга апликација, како и.

широка меморија
Колку повеќе предмети или поголем, објекти, повеќе меморија. Повеќе активни теми справување со задачи, а потоа на повеќе меморија е во употреба. Се разбира, тоа значи дека голем меморија задачи треба Дроселиране.

Потребата да се игра убаво
Твоето барање не може да биде само апликација се извршува на компјутерот. Кога една апликација Hogs ресурси, секој се чувствува болка. Играње убаво со други навраќа на она што сите ние го научиле во детството. Истото важи и кога развој на софтвер кој не работи како самостојна апликација.

Темата на развојот на мулти-кор е да се задржи тврдењето, задачи натпреваруваат за истата ресурси, на минимум.

Ако динамичен парадигма распаѓање на подели-и-Освои одговара на вашите потреби, тогаш прочитајте го овој напис за верзија со високи перформанси на DSE version of Tymeac. Инаку Функционална forking рамка може подобро да одговараат на вашите потреби.

Функционална forking Рамковниот

Java ™ SE / ME мулти-кор апликации, како и Android ™ апликации кои што не можат да го користат моделот на делење на-и-ја освои, не со големи низи од броеви или немаат пресмета интензивна структура треба функционална рамка forking за parallelizing апликации . Поточно, тие треба да вилушка од работата во своите функционални компоненти, а не се распаѓаат низа во идентични подзадачи.

Слика 3: Функционални forking Рамковниот

Functional Forking Framework

Функционална forking Рамковниот

А функционална рамка forking има две основни атрибути. Таа мора да:

Ограничете тврдењето.
Да биде едноставна да се користат или засрамувачки паралелно.
Тврдењето граница

Одржување на бројот на активни, се натпреваруваат теми на апсолутен минимум е огромно. Најлесен начин да се ограничи тема тврдењето е да се користи прагот за секоја тема базен сервисирање на дното на задачи. Погледнете го овој напис на високи перформанси Приоритет Редици во Java SE за пример за тоа како користење Чекај листи може да се зачува провира ресурси.

Повторната употреба на ресурси, а не стекнување на нови копии на ресурси е победник на сите околу. Ние треба да се разгледа не само код задача, но код за управување со ресурси, како и.

Земете го примерот на задачата што им е потребна за пристап до базата на податоци со која се бара [java.sql.] Изјава. Со користење на дното на барања, кодот за задача да го делат истиот изјава за многу пристапи, а не добивање на нова изјава за секој пристап. Споделување на изјава е огромна заштеда во главата и граници тврдењето под код за управување.

Што е засрамувачки паралелно?

Засрамувачки паралелни алгоритми се оние кои може да се реши многу слични, но независно задачи истовремено со малку да нема потреба од координација меѓу задачите. Овие видови на проблеми се како лесно паралелизацијата дека еден е речиси “срам” да се зборува за тоа како едноставна е да се добие многу процесори работат ефикасно.

Засрамувачки паралелно решение лесно може да им бидат исплатени во голем број на целосно независни компоненти, секоја извршување на посебен процесор.

Слика 4: засрамувачки Паралелно

Embarrassingly Parallel

засрамувачки Паралелно

На пример:
А бизнис може да треба автоматски систем цена понуда. Да се развие еден цитат, системот треба база точка цена (цена база на податоци), попуст на корисникот за предмети и превозот (клиент база на податоци), како и основните трошоци за испорака (спонзор база на податоци).

Традиционално, на програмата се пристапи секоја база на податоци сериски, чекање за секој пристап за да се заврши пред да се пресели на следниот пристап.

Во паралелен систем, вилушки програма () барањето во три колони, секој сервисираат од страна на конец базен, чека до последен завршува пристап и спојките () резултатите заедно.

Слика 5: цени

Горенаведените цени е пример за синхрони барање, каде повикувачот чека за нејзино завршување. Тоа е само мал чекор напред да се додаде поддршка за асинхрони или автономни барање, каде повикувачот не чека за завршување.

Има многу, многу ситуации каде што forking работата во неговите компоненти е пожелно:

Земете игра апликација каде што можеме да вилушка настан во одделни компоненти. Предноста тука е возбуда, повеќе сегменти настан се случуваат истовремено, толку повеќе интересна игра.
Земете апликација со повеќе анимации каде што може да им бидат исплатени секој анимација да работат на свој процесор.
Земете операција на обработка на слика каде што секој пиксел во сликата треба да има во нејзината боја обратна. Рамката може лесно да се дистрибуираат податоци на сликата за повеќе задачи кои можат да работат независно еден од друг.
Земете една финансиска институција, каде што повторно вреднување на портфолио вклучува компоненти кои комуницираат со различни пазари низ целиот свет.
Земете апликација за здравствена заштита каде што разни тестови се компоненти во поставувањето на дијагнозата.
Тоа е еден обид да се види само она што барањето не може да се користи паралелизацијата со функционална рамка forking.

Како ќе изгледа оваа рамка во апликација Java ™?

Рамка за forking барање во своите функционални компоненти треба да:

Знаат компоненти (Редици) за секоја операција барање (функција.) А едноставна класа содржи името на функцијата Стринг и листа на поврзани Редици е основната Java ™ програмирање.

Листата 2: Функција Класа

јавни класа Функција {

приватниот Стринг име; // Име Функција
приватни дното [] que; // Редици за оваа функција,
}
Место на барањето (кои содржат влезните објекти) во секоја од редици враќање на предмет низа на повикувачот или игнорирање на вратени предмети.

Листата 3: Ставете во редот за чекање

јавните Објект [] вилушка (редицата [] que, објект барање) {

Објектно [] = new return_obj Објект [] {нула, нула, нула};

за (int i = 0; i <que.length; i ++) {
putInQueue (que [i], return_obj [i], барање);
}

врати return_obj;
}
Чекај за завршување / истек на време или не чекајте.

Котација 4: Чекај / noWait

јавни логичка приклучат (Објект [] OBJ) {

/ * Кога сите елементи се не-нула, врати вистина
* почекај малку
* По интервал, се врати лажни
* /
}

Се врати на резултатите на повикувачот или игнорира објекти

Слика 6: Врати се на повикувачот

Return Object[]

 

 

Врати Објект

За да се изгради оваа рамка ние ќе:

Треба да се одржи на реалните код задача која ја врши работата
Треба да се одржи на листа на редици и функции
Треба да се одржи класа “стартување”, кој го вчитува Редици и функции во меморијата
(1) код кој ја врши работата треба да изгледа вака:

Листата 5: Работа законик

јавни статички главен предмет (OBJ објект) {}
А главната () метод, кој прифаќа објект (на влез од повикувач) и се враќа на објектот (како резултат на делото.)

(2) Ние може да се задржи на редици и функционира како објекти во едноставна листа класа.

(3) Стартувајте едноставно може да се вчита Класи на листата во меморијата со нова (Листа класа) и започнете го теми за секоја задача.

Како едноставен повик може да се погледне:

Листата 6: едноставен повик

Рамка FW = нова рамка ();

// За секој повик:
Функција функцио = fw.getFunction (име);
Објектно [] = назад func.fork (барање};
Оваа рамка е едноставен за користење, засрамувачки едноставна.

Pезиме

Досега видовме како forking барање во своите функционални компоненти можат да работат како вграден дел од една апликација (во рамките на истата JVM.) За да бидат практични, ние исто така треба да се направи рамка достапни од други JVM е. Едноставно, тоа мора да го поддржи многу кориснички повици истовремено како сервер.

Што го прави серверот

Какви промени мора да ги направи да се гради оваа едноставна рамка во серверот?

Ние мора да се подели на повикувачот од работењето.
Ние мора да се обезбеди грешка обновување.
Ние мора да го поддржи рамка како далечен објект.
Ние мора да се обезбеди безбедност.
Ние мора да се обезбеди административна функција за контрола на серверот.

Поделба
Првата промена е одделување на посредувањето на барање (тоа е начинот на над вилушка ()) од реалните обработка. Ние треба да се разделиме, но ги пратите, секое барање на уникатен објект.

Листата 7: објект барање

приватниот долг unique_id; // Единствена идентификација на ова барање
приватен влез објект; // Влез референца, ако ги има
приватниот логичка тип; // Тип на барањето вистина = синхронизирате лажни = async
приватни Објект [] // излез на излез предмети од задачите
приватни AtomicInteger next_output; // Индекс да додадете елемент на погоре
приватни дното [] que_names; // Листа на сите редици во оваа функција,
приватни дното агент; // Иднината на дното, ако се користи
приватни AtomicInteger nbr_remaining; // Редици што треба да ги обработуваат
приватниот int wait_time; // Максимално време на чекање за барање синхронизација

Што е полето “агент?”

агент
Синхронизирана барање враќа низа објект од преработка на повикувачот. Што треба да се направи рамка со низа на објектот се врати од асинхрони барање? Рамката може евентуално да се стави на низа објект (како влез) во нов ред за обработка од страна на задача агент. На овој начин задача агентот може да се преземе акција врз основа на статусот на проектот на претходна обработка.

На пример:
Функција е да се генерираат цени и е-мејл на корисникот како асинхрони барање.

Повикувачот користи методот на асинхрони вилушка ().
Рамката вилушки барање во својата соодветните редици.
Кога последен дното завршува, во рамките поминува вратените објект низа на задача на агентот со ставање на барање во редот наведен како “агент”.
Задачата на агент испраќа ништо e-mail да се вратат.
грешка обновување
Втората промена е додавање на грешка обновување, ознаката на професионализам.

Што може да тргне наопаку тука? “Се што може да тргне наопаку, ќе тргне наопаку”. Законот Марфи.

назад
Ние би можеле да имаат forking грешка. Која е сврзана со Задача може да биде целосно или на листа на чекање може да биде исклучен (повеќе за ова подолу.) Грешка обновување треба да се врати на сите редици кои чаталестите успешно и да ги информира повикувачот на проблемот. На пример:

Имаме три Редици (A, B, C) во функција.
Редици А и Б успешно добие барање.
Задача Ц не е поднесено барањето, бидејќи редот е полна.
Сега одиме наназад се обидува да се повлече барањето од сите Редици кои чаталестите успешно, па ние може да заштедите време за погрешни обработка на барањата.

Исклучок / Грешка
Ние би можеле да имаат исклучок / грешки во вистинскиот код задачата која ја врши работата. Ако тоа не еднаш, тоа веројатно нема да успее повторно. Затоа, тоа е препорачливо за да се оневозможи на листа на чекање се додека инвеститорот решава проблемот. Кога код задача е чиста, ние не сакаме да ги симнат на серверот. Ние сакаме да се информираат на серверот дека имаме нова копија на кодот за задача која е чиста и ние сакаме на листа на чекање е овозможено.

штанд
Ние би можеле да имаат над случи во асинхрони барање, наречен штанд (синхрони барања време надвор и да ги избришете од системот.) Бидејќи функции не може да заврши се додека сите редици заврши, ние треба да се одржи во застој барања на застојот во листата. Кога редот е повторно здрав, може да се ре-проектот за обработка од застојот во листата.

Бришење е предмет при себе и бара задржување конец. Оваа статија воведува предмет: Управување Теми во Java SE

Тема дилема
Ние би можеле да имаат блок тема засекогаш на надворешен извор или да одат во една бескрајна јамка. Во секој случај, со тајмингот настани во животот на една тема, рамки може да го препознае оваа ситуација и може да Бришење на конец го заменува со нова нишка.

откажување
Ние би можеле да имаат повикувачот сакате да го откажете претходно доставено барање. За откажување е сличен на грешка тајм-аут, но тоа може да се примени на двете синхрони и асинхрони барања. Иако откажување на барањето е најпосакуваниот, логиката за справување со откажување во мулти-компонента барање не е за слабо срце.

следење
Тајмингот е бескорисна ако серверот нишка следи временски настани во потрага за вистински или потенцијални проблеми.

известување
Не рамка може да се справи со секоја ситуација; понекогаш човечка интервенција е потребно. Ние треба да го извести администраторите со испраќање порака преку она што значи на употреба организација (инстант пораки, e-mail, или било кој домашните метод.)

далечински објект
Третата промена е поддршка на рамка како далечен објект со опционален активирање / деактивирање да се зачува ресурси.

Remote Метод призив доаѓа во многу вкусови:
Основни
Прилагодено Socket Фабрика
IIOP
Пренослив адаптер објект
Jini
Интер процесот на комуникација

Вашата околина може да се состои од облак со посебни процесори на многу различни локации. Изведба на флексибилна рамка го прави совршена смисла.

безбедност
Четвртиот промена е додавање на безбедност.

безбедност технологија Java ™ е дел од SE / ME платформи, тоа бара пред завршува на серверот со часови безбедност за флексибилност.

администратор функции
Петтиот промена е додавање на администратор функции.

Сеча е здодевна и главно се бескорисни, додека нешто не е во ред.

Статистички податоци се основа за анализа на перформансите и подесување.

Ние треба да обезбеди интерфејс на внатрешни структури, така што корисниците можат да ја следат и контролираат функционалност. Тоа не е многу добра, ако никој не знае што прави. Откако луѓе знаат она што го прави, тие веројатно ќе сакате да го промените.

Пишување на Fork-Приклучи рамка која е едноставна за употреба и ефикасна за локални повици е тешко. Го прават истото за пристап до мрежа е голем потфат.

Колку време е потребно за да се изгради таков сервер?

Околу 5-6 секунди. Само доволно долго за да ја отпакувате една датотека.

За среќа, постојат општа намена, вилушка приклучат рамки поддршка на својства наведени погоре за секој ден, мулти-кор апликации во Java ™ SE, ME и Android ™ достапна денес. И со оглед на рамка може да се кандидира како RMI Сервер (стандард / активираат, IIOP и ПОА) е на располагање за Java ™ апликации за енергетска ефикасност.

Tymeac ™ за Java ™ SE / ME / Android ™ платформи се Слободниот софтвер проекти Извор одржува на
и можете да ги симнете најновите изданија таму. . SourceForge.net

Заклучок

Со користење на вилушка Зачлени рамка развиена за интензивните компјутерски заедници не може да работи добро за секојдневни апликации.

Најголемиот дел од Java ™ мулти-кор апликации треба да им бидат исплатени на работа во своите функционални компоненти со рамка професионални одделение, кој е лесен за користење, ефикасен и со отворен код.

Референци

Превземања:

Симнете ја најновата верзија на SE Tymeac here. Со целокупната документација, скрипти, класи и изворот.

Симнете ја најновата верзија на МЕ Tymeac here. Со целокупната документација и изворот.

Симнете ја најновата верзија на Tymeac here. Со целокупната документација и целосно затемнување на проекти.

Симнете ја најновата верзија на DSE Tymeac here. верзија Јаз-и-освојат.

членовите:

со високи перформанси јаз-и-Освои верзија на Tymeac – А Јава Fork-Приклучи Освојувачот

Со високи перформанси Android ™ верзија на Tymeac – Управување Теми во Андроид

Користење Чекај листи за ефикасност – со високи перформанси Приоритет Редици во Java SE

Тема на садот Java ™ SE – Управување Теми во Java SE

Друго:

Вилушка се приклучат на дното вики – http://en.wikipedia.org/wiki/Fork-join_queue

Законот Марфи – http://en.wikipedia.org/wiki/Murphy%27s_law

Процесорот кеш вики – http://en.wikipedia.org/wiki/CPU_cache

Кеш кохерентност вики – http://en.wikipedia.org/wiki/Cache_coherence

Засрамувачки паралелно вики – http://en.wikipedia.org/wiki/Embarrassingly_parallel