1. Modifajeri (Modifikatori)
|
|
- Bojan Jokić
- пре 5 година
- Прикази:
Транскрипт
1 Методика наставе рачунарства Владимир Филиповић
2 Вишенитно програмирање Владимир Филиповић
3 Нити у језику Јава 3/65 Преко нити (енг. thread) је обезбеђен један облик паралелизма (конкурентности) у програмском језику Јава. У презентацији ће бити описани основни појмови који се односе не нити и начин рада са нитима на ниском нивоу. Литература: 1. P. Hyde, Java Thread Programming. 2. M Adler, D. Herst, Mastering Java Threads. 3. S. Oaks, H. Wong, Java Threads.
4 Конкурентност у рачунарству 4/65 Конкурентност у оперативним системима: редна обрада (енг. batch processing), рад у раздељеном времену (енг. time-sharing), мултипрограмирање. Логичка и физичка конкурентност. Програмски језици који подржавају мултипрограмирање обезбеђују логичку конкурентност. Процес - основни појам мултипрограмирања.
5 Процес и нит P r o c e s 1 P r o c e s 2 P r o c e s 3 nit1 Конкурентност у Јави је оставарена преко нити. Нит је независан ток низа инструкција које се извршавају паралелно са неким другим токовима инструкција. Целокупно функционисање Јаве је засновано на нитима. P r o c e s 1 nit2 nit3 5/65
6 Креирање нити 6/65 main() //Kreiraj nit1 //Pokreni nit1 //Kreiraj nit2 //Pokreni nit2 //Kreiraj nit3 //Pokreni nit3 Nit3 run() { // Nit2 run() { // Nit1 run() { //
7 Креирање нити (2) 7/65 Методе за рад са нитима обезбедјује класа Thread. Конкретне нити су примерци класе Thread, али се могу креирати на два начина: 1. Као примерци неке поткласе класе Thread, при чему онда наслеђују све методе класе Thread од којих је најважнији метод run. 2. Као елементи неких класа које имплеметирају интерфејс Runnable и метод run() овог интерфејса. Ово је једини метод интерфејса Runnable и служи за дефинисање шта ће дата нит радити у класи где се користи. Други начин се чешће користи јер је прихватљивији са гледишта практичне примене.
8 Креирање нити (3) 8/65 java.lang.thread Thread(Runnable target) креира нову нит која позива метод run() објекта target који имплементира интерфејс Runnable. void start() започиње ову нит, позива метод run(). Метод моментално враћа контролу текућој нити. Нова нит се извршава конкурентно. void run() позива метод run() придруженог Runnable објекта. java.lang.runnable void run() мора бити предевазиђен, а у телу се наводе наредбе које ће се извршити покретањем нити.
9 Прекидање нити 9/65 Нит се завршава када се заврши њен метод run()и то извршавањем наредбе return, након извршавања последње наредбе у телу метода или уколико се деси избацивање изузетка који се не ухвати унутар метода. Метод interrupt() се може користити како би се затражио завршетак нити. Када се за нит позове метод interrupt(), постави се тзв. статус прекида нити. То је маркер који поседује свака нит и који би требало повремено да проверава да ли је тај њен маркер постављен. Међутим, уколико је нит блокирана, није могуће проверити њен статус прекида.
10 Прекидање нити (2) 10/65 Ту је од значаја изузетак InterruptedException. Када се метод interrupt() позове за нит која је блокирана при позиву попут sleep() или wait() (о којима ће бити речи касније), позив метода се завршава избацивањем изузетка типа InterruptedException. Није обавезно да нит за која је прекинута мора да се заврши. Прекид просто служи да привуче њену пажњу. Прекинута нит може да одлучи како ће реаговати на прекид. Неке нити су веома важне, па могу руковати изузетком и наставити своје извршавање. Међутим, прилично је уобичајено да нит интерпретира прекид као захтев за завршетком.
11 Прекидање нити (3) 11/65 У том случају, метод run() је следећег облика: public void run(){ try { while(!thread.currentthread().isinterrupted() && има још посла) { ради catch(interruptedexception e) { // нит је прекинута за време позива sleep() или wait() finally { завршно чишћење, ако је потребно // излазак из метода run() завршава нит
12 Прекидање нити (4) 12/65 java.lang.thread void interrupt() шаље нити захтев за прекид. Статус прекида нити се поставља на true. Ако је нит тренутно блокирана позивом метода sleep(), избацује се изузетак типа InterruptedException. static boolean interrupted() тестира да ли је текућа нит (тј. нит која извршава ову наредбу) прекинута. Метод је статички. Позив овог метода има бочни ефекат - ресетује статус прекида текуће нити на false. boolean isinterrupted() тестира да ли је нит прекинута. За разлику од статичког метода interrupted(), позив овог метода не мења статус прекида нити. static Thread currentthread() враћа Thread објекат који представља нит која се тренутно извршава.
13 Стање нити 13/65 Нит се може налазити у једном од 6 стања: 1. new 2. runnable 3. blocked 4. waiting 5. timed waiting 6. terminated Како би се утврдило у ком стању је тренутно нит, може се позвати метод getstate().
14 Стање нити (2) 14/65 1. New Када се нит креира коришћењем оператора new, нпр. new Thread(r), она се још увек не извршава. Таква нит је у стању new. 2. Runnable Након што се позове метод start, нит прелази у стање runnable. Заправо, runnable нит може, а не мора да се извршава. На оперативном систему је да дâ нити време за извршавање. Након што нит започне извршавање, она не мора наставити да се извршава. У ствари, пожељно је да се нити повремено паузирају, како би и друге нити добиле шансу да се извршавају. Детаљи извршавања нити зависе од оперативног система. Системи који имају тзв. preemptive scheduling дају свакој runnable нити делић времена за извршавање. Након што се то време потроши, оперативни систем даје другој нити шансу да ради. Приликом избора следеће нити, оперативни систем узима у обзир приоритете нити. Међутим, мали уређаји, попут мобилних телефона могу да користе cooperative scheduling. У таквом уређају, нит губи контролу једино када позове метод yieldили када блокира или чека.
15 Стање нити (3) 15/65 3. Blocked Нит која је у овом стању је привремено неактивна. Таква нит не извршава никакав кôд и користи минималне ресурсе. Када нит покуша да добије катанац објекта који тренутно држи нека друга нит, она прелази у стање blocked. Нит постаје одблокирана када се све остале нити одрекну катанца и распоређивач нити допусти тој нити да га узме. Када је нит у стању blocked (или, наравно, када се заврши), друга нит ће бити распоређена да се извршава. 4. Waiting Нит која је у овом стању је привремено неактивна. Таква нит не извршава никакав кôд и користи минималне ресурсе. Када нит чека да друга нит обавести распоређивача нити о неком услову, она је у стању waiting. Ово се дешава позивањем метода wait() класе Object или метода join класе Thread или чекањем на Lock или Condition из пакета java.util.concurrent. Када је нит у стању waiting (или, наравно, када се заврши), друга нит ће бити распоређена да се извршава.
16 Стање нити (4) 16/65 5. Тimed waiting Неколико метода за рад са нитима поседује параметар timeout. Њихово позивање узрокује да нит пређе у стање timed waiting. Нит излази из овог стања након истека задатог времена или ако прими одговарајућу нотификацију. Методи са параметром timeout су sleep() класе Thread, wait() класе Object, join() класе Thread, trylock() класе Lock и await() класе Condition. 6. Terminated Нит је у стању terminated из једног од следећа два разлога: умрла је природном смрћу јер је њен метод run() завршен нормално умрла је изненада јер је неухваћени изузетак завршио метод run(). Поред тога, могуће је убити нит позивом метода stop(). Међутим, овај метод је застарео и никада га не треба позивати из сопственог кôда.
17 Стање нити (5) 17/65
18 Стање нити (6) 18/65 java.lang.thread void join() чека да се одређена нит заврши. void join(long millis) чека да се одређена нит заврши или да прође задати број милисекунди. Thread.State getstate() враћа стање текуће нити: једно од NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED void stop() зауставља нит. Застарео! void suspend() суспендује извршавање текуће нити тј. блокира текућу нит све док нека друга нит не позове метод resume. Застарео! void resume() наставља текућу нит. Валидан је само након што је позван метод suspend(). Застарео!
19 Приоритет нити 19/65 Нити могу имати разне приоритете. У принципу, нити које су интерактивне треба да имају виши приоритет у односу на нити које реализују обимна израчунавања. Приоритет нити у Јави је одређен бројем. Овде нижи број одговара нижем приоритету, а виши број вишем приоритету. Јава обезбеђује константе: Thread.MAX_PRIORITY, Thread.MIN_PRIORITY и Thread.NORM_PRIORITY за задавање приоритета. Приоритет се задаје преко метода: setpriority(int priority)
20 Приоритет нити (2) 20/65 java.lang.thread void setpriority(int newpriority) поставља приоритет текуће нити. Приоритет мора бити између Thread.MIN_PRIORITY и Thread.MAX_PRIORITY. Користити Thread.NORM_PRIORITY за нормалан приоритет. static int MIN_PRIORITY минималан приоритет који нит може имати. Вредност је 1. static int NORM_PRIORITY подразумевани приоритет нити. Вредност 5. static int MAX_PRIORITY максималан приоритет који нит може имати. Вредност 10. static void yield() Уколико постоје друге runnable нити приоритета бар оноликог колики је приоритет текуће нити, оне ће бити распоређене следеће. Метод је статички.
21 Демон - нит 21/65 Нити које се извршавају у позадини да би подржали функционисање Јава окружења, називају се демон - нити. Такве нити су: управљач часовником, скупљач отпадака, нит за ажурирање екрана итд. Нити које креира програмер нису даемон - нити, већ корисничке нити. Може се подесити тако да се корисничке нити претворе у демон-нити. java.lang.thread void setdaemon(boolean isdaemon) означава текућу нит као демонску или корисничку. Овај метод мора се позвати пре него што се нит стартује. boolean isdeamon() враће true или false у зависности од тога да ли је текуће нит демон-нит
22 Груписање нити 22/65 Нити се организују по групама. Група нити је колекција нити којом је могуће манипулисати одједном. Тако, на пример, нити једног аплета чине групу. Аплет може да манипулише само нитима из своје групе (не и другима!) Један аплет не може да стопира ажурирање екрана јер се то извршава помоћу нити друге групе. Групе нити су хијерархијски организоване. Знају се родитељске нити и нити-деца (настали из родитељских). Постоји низ метода за манипулисање групама тредова: getthreadgroup() из класе java.lang.thread getparent() из класе java.langgroup итд.
23 Груписање нити (2) 23/65 Подразумевано, све нити које креира програмер припадају истој групи нити, али могуће је извршити и другачија груписања. Почев од Јаве 5.0 не треба користити групе нити у сопственим програмима. Класа ThreadGroup имплементира интерфејс UncaughtExceptionHandler. Њен метод uncaughtexception() врши следећу акцију: 1. ако група нити има родитеља, позива се метод uncaughtexception() родитељске групе. 2. иначе, ако метод getdefaultexceptionhandler() врати не-null handler, он се позива 3. иначе, ако је Throwable инстанца класе ThreadDeath, ништа се не дешава 4. иначе, име нити и запис са стека извршавања за Throwable се штамају на System.err.
24 Проблем синхронизације 24/65 Нити често деле неке ресурсе (податке) и уколико се није пажљиво приликом оперисања са њима, могу да се појаве нежељени резултати. На пример, нека две нити штампају два различита документа. Ако те нити раде истовремено, мало штампа један, мало други (и тако наизменично), онда ћемо добити мешавину два документа, а не одвојено одштампана два документа. Пример. Симулира се рад банке са рачунима корисника. На псеудослучајан начин се генеришу трансакције којима се премештају средства између ових рачуна. Сваки од рачуна има једну нит. Свака од трансакција премешта одређену (псеудослучајним путем генерисану) своту новца са рачуна који опслужује дата нит на други (псеудослучајним путем изабрани) рачун.
25 25/65 Проблем синхронизације (2) Пример (наставак). Имплементација је једноставна. Креира се класа Bank која садржи метод transfer, који преноси неку количину новца са једног рачуна на други. У овој једноставној имплементацији се не разматра могућност неконзистенције стања на рачуну. Следи код метода: public void transfer(int from, int to, double amount) // CAUTION: unsafe when called from multiple threads { System.out.print(Thread.currentThread()); accounts[from] -= amount; System.out.printf(" %10.2f from %d to %d", amount, from, to); accounts[to] += amount; System.out.printf(" Total Balance: %10.2f%n", gettotalbalance());
26 26/65 Проблем синхронизације (3) Пример (наставак). Класа TransferRunnable има следећу структуру. Њен метод run врши премештање средстава са датог (фиксираног) рачуна. У свакој од итерација, метод run псеудослучајно бира циљни рачуни и износ, позива метод transfer над објектом класе bank и потом спава током псеудослучајног периода: class TransferRunnable implements Runnable {... public void run() { try { int toaccount = (int) (bank.size() * Math.random()); double amount = maxamount * Math.random(); bank.transfer(fromaccount, toaccount, amount); Thread.sleep((int) (DELAY * Math.random())); catch(interruptedexception e) {
27 27/65 Проблем синхронизације(4) Пример (наставак). Као што смо видели, на крају сваке трансакције метод method рачуна укупан износ и приказује га на стандардном излазу. Овај програм никад не завршава са радом, па је потребно притиснути комбинацију тастера CTRL+C ѕа ѕавршетак. Када се извршава програм, требало би да укупан износ новца (тј. сума стања на свим рачунима) буде непромењена, јер се новац само сели са једног рачуна на други. Типичан излаз из који генерише програм је:... Thread[Thread-14,5,main] from 14 to 22 Total Balance: Thread[Thread-13,5,main] from 13 to 81 Total Balance: Thread[Thread-36,5,main] from 36 to 73 Total Balance: Thread[Thread-35,5,main] from 35 to 77 Total Balance:
28 28/65 Проблем синхронизације (5) Пример (наставак). Као што се може видети, постоји грешка. У првих неколико трансакција баланс банке остаје $100,000, што је тачна вредност када има 100 рачуна на којима се стање $1,000. Међутим, после неког времена, баланс почиње да се полако мења. Некад се догоди да грешка настане брже, а некад треба много времена да баланс постане погрешан. У сваком случају, банка са оваквим софтвером не би била сигурно место за штедњу! У овом примеру, проблем настаје када две нити симултано покушавају да ажурирају исти рачун. Претпоставимо да две нити симултано извршавају наредбу: accounts[to] += amount; Проблем је у томе што ова наредба није атомичка операција.
29 29/65 Проблем синхронизације (6) Пример (наставак). Ова Јава наредба се може реализовати следећим наредбама бајт-кода (тј. следећим корацима): 1. Учитај accounts[to] у регистар JVM. 2. Изврши сабирање тј. увећање садржаја регистра JVM. 3. Врати резултат из регистра у accounts[to]. Претпоставимо да је прва нит извршила коараке 1 и 2, а да је потом прекинуто њено извршавање. Нека се онда пробудила друга нит и нека је ажурирала исти елеменат низа рачуна (извршила сва три корака). Потом се пробудила прва нит и извршила корак 3. Овим извршењем корака 3 су избрисане промене које је направила друга нит и рачуни су постали некоректни.
30 Проблем синхронизације (7) 30/65 Пример (наставак). Претходно опсиану ситуацију илуструје дијаграм активности:
31 31/65 Проблем синхронизације (8) Пример (наставак). Шанса за уочавање проблема је у овом примеру повећана преплитањем наредби за приказ на стандардни излаз са наредбама којима се ажурира стање на рачуну. Ако би се уклониле наредбе за приказ, битно се умањује ризик од настанка грешке, јер нит има јако мало посла пре него што заспе, па није много очекивано да ће распоређивач прекинути рад нити у сред израчунавања. Међутим, ризик од грешке је смањен, али није нестао. Ако се извршава јако много нити на веома оптерећеном рачунару, и програм без приказа ће опет дати погрешне резултате. Основни проблем је то што метод transfer може бити прекинут у сред рада. Ако би се могло обезбедити да се овај метод изврши до краја пре него што нит изгуби контролу, тада стање рачуна никада неће бити корумпирано.
32 Катанци 32/65 Разумевање синхронизације нити је једноставније када се прво проуче катанци и услови. Пакет обезбеђује класе за реализацију ових фундаменталних механизама. У основи, заштита блока кôда помоћу катанца, тј. помоћу објекта типа ReentrantLock из пакета java.util.concurrent изгледа овако: mojkatanac.lock(); // ReentrantLock објекат try{ критична секција finally{ mojkatanac.unlock(); Оваква конструкција гарантује да у сваком тренутку само једна нит може ући у критичну секцију. Оног тренутка када једна нит закључа катанац, ниједна друга нит не може проћи наредбу lock.
33 Катанци (2) 33/65 Када друге нити позову метод lock, оне се деактивирају све док нит која је позвала метод lock не откључа катанац. Напомена. Од кључног је значаја да се операција unlock извршава унутар клаузе finally. Наиме, уколико кôд унутар критичне секције избаци изузетак, катанац се мора откључати - иначе, остале нити ће заувек остати блокиране. Пример. Коришћење катанца ради заштите метода transfer класе Bankа. public class Bankа1 { private Lock bankаlock = new ReentrantLock(); // ReentrantLock implementira interfejs Lock
34 Пример (наставак). public void transfer(int sa, int na, int iznos) { Катанци (3) bankalock.lock(); try { System.out.println(Thread.currentThread()); racuni[sa] -= iznos; System.out.printf(" %10.2f sa %d na %d", iznos, sa, na); racuni[na] += iznos; System.out.printf(" Ukupan iznos: %10.2f%n", getukupnostanje()); finally { bankalock.unlock(); 34/65
35 Катанци (4) 35/65 Претпоставимо да једна нит позове метод transfer и буде прекинута пре него што заврши. Претпоставимо да друга нит такође позове метод transfer. Друга нит не може добити катанац и блокира у позиву метода lock. Она се деактивира и мора да чека да прва нит заврши извршавање метода transfer. Када прва нит откључа катанац, друга може наставити своје извршавање. Када се у програм унесу ове измене, он се може извршавати заувек, а укупно стање у банци никада неће постати погрешно. Приметимо да сваки Banka објекат поседује сопствени ReentrantLock објекат. Ако две нити покушају да приступе истом Banka објекту, катанац служи за серијализацију приступа. Међутим, ако две нити приступају различитим Banka објектима, онда свака нит добија различит катанац и ниједна не блокира, што и јесте жељено понашање.
36 Катанци (5) 36/65 Катанац се зове са поновљеним уласцима (енг. reentrant), јер нит може у више наврата да добија катанац који већ поседује. Катанац прати тзв. бројач држања, односно угњеждених позива метода lock. Нит мора да позове unlock за сваки позив lock како би ослободила катанац. Захваљујући овоме, кôд заштићен катанцем може позвати други метод који користи исте катанце. Генерално, штите се блокови кôда који ажурирају дељени објекат или му приступају. Тако се постиже да се ове операције извршавају у потпуности пре него што друга нит може да користи исти објекат. Напомена. Потребно је бити пажљив да се кôд у критичној секцији не заобиђе избацивањем изузетка. Уколико се избаци изузетак пре краја критичне секције, finally клауза ослобађа катанац, али објекат може бити у оштећеном стању.
37 Катанци (6) 37/65 java.util.concurrent.locks.lock void lock() дохвата текући катанац, блокира ако нека друга нит већ поседује катанац. void unlock() ослобађа текући катанац. java.util.concurrent.locks.reentrantlock ReentrantLock() конструише катанац који се може користити за заштиту критичне секције. ReentrantLock(boolean fair) конструише катанац са задатом политиком праведности. Праведан катанац фаворизује нит која је чекала дуже. Међутим, гарантовање праведности може значајно утицати на перформансе. Према томе, подразумевано је да катанци нису праведни. Напомена. Звучи лепше бити праведан, али праведни катанци су доста спорији од регуларних. Једино у случају да постоје специфични разлози због којих је праведност кључна за програм, само тада треба користити праведне катанце.
38 Условни објекти 38/65 Често нит уђе у критичну секцију само да би открила да не може да настави даље док неки услов не буде испуњен. За руковање нитима које су добиле катанац, али не могу радити нешто корисно користи се условни објекат. Из историјских разлога, условни објекти се често називају и условне променљиве. Пример. У случају банкесе поставља додатни, логични захтев: не сме бити преноса новца са рачуна који нема довољно средстава. Приметимо да не можемо користити кôд попут if(racuni[sa] >= iznos) banka.transfer(sa, na, iznos); Наиме, потпуно је могуће да текућа нит буде деактивирана између успешне провере постојања довољних средстава и позива метода transfer, па да до тренутка када се нит поново активира, стање на рачуну постане ниже од потребног.
39 Условни објекти (2) 39/65 Пример (наставак). Дакле, неопходно је обезбедити да ниједна друга нит не може модификовати стање између провере услова и акције трансфера. То се чини заштитом и услова и акције трансфера катанцем. public void transfer(int sa, int na, int iznos){ bankalock.lock(); try{ while(racuni[sa] < iznos){ // cekanje // prenos sredstava finally{ bankalock.unlock();
40 Условни објекти (3) 40/65 Пример (наставак). Шта да се ради када нема довољно новца на рачуну? Чекамо док га нека друга нит не дода. Али постоји проблем: нит која подиже новац је управо добила ексклузивни приступ катанцу bankalock, па ниједна друга нит нема шансу да изврши улагање на рачун. Ту насупају условни објекти. Сваки катанац може имати један или више придружених условних објеката. Условни објекат се добија позивом метода newcondition(). Пожељно је да име објекта асоцира на услов који он представља. class Banka1{ private Condition dovoljnosredstava; public Banka1(){ dovoljnosredstava = bankalock.newcondition();
41 Условни објекти (4) 41/65 Пример (наставак). Уколико се при извршавању метода за преност открије да није доступна довољна количина новца, онда се позива dovoljnosredstava.await(); Текућа нит се онда деактивира и ослобађа се катанац bankalock. Тиме се допушта да га узме нека друга нит која ће, евентуално, повећати стање на рачуну. Након што нит позове метод await, та нит постаје део тзв. скупа чекајућих нити за тај услов. Нит се не реактивира када катанац постане доступан, већ остаје деактивирана све док друга нит не позове метод signalall за исти услов. Дакле, када друга нит изврши трансфер новца, треба да позове dovoljnosredstava.signalall();
42 Условни објекти (5) 42/65 Позив метода signalall реактивира све нити које чекају на тај услов. Нити се уклоне из скупа чекајућих нити за тај услов, оне су поново у стању runnable и распоређивач их може активирати. У том тренутку оне ће покушати да поново добију катанац. Чим катанац постане доступан, једна од њих ће га добити и наставити тамо где је стала, а то је завршетак позива метода await. Нит која се сада извршава поново тестира услов одређен условним објектом. Нема гаранције да је он сада испуњен метод signalall просто даје сигнал нитима које чекају да је услов можда сада испуњен и да има смисла поново извршити проверу. Генерално, позив метода await треба да буде у петљи облика: while(!(ok_nastaviti) ) uslovni_objekat.await();
43 Условни објекти (6) 43/65 Од кључног је значаја да нека друга нит у неком тренутку позове метод signalall. Када нит позове await, нема начина да саму себе реактивира. Она се узда у друге нити. Уколико ниједна од њих не реактивира нит која чека, она се никада више неће извршавати. То може водити неугодној ситуацији смртоносног блокирања. Уколико су све остале нити блокиране и последња активна позове await не одблокирајући ниједну од осталих нити, она такође бива блокирана. Ниједна нит не остаје да одблокира остале и програм стаје (не завршава се извршавање, али ништа се ни не дешава).
44 Условни објекти (7) 44/65 Када је потребно позивати signalall? Увек када се стање објекта промени на начин који може утицати на нити које чекају. Пример. У случају банке, кад год се стање на рачуну промени, нитима које чекају треба дати нову шансу да провере стање. Дакле, позива се метод signalall када се заврши са преносом средстава. public void transfer(int sa, int na, int iznos){ bankalock.lock(); try{ while(racuni[sa] < iznos) dovoljnosredstava.await(); // prenos sredstava dovoljnosredstava.signalall(); finally{ bankalock.unlock();
45 Условни објекти (8) 45/65 Позив метода signalall не активира моментално нит која чека. Он једино одблокира нити које чекају како би се могле надметати за катанац након што га текућа нит ослободи. Други метод, signal, одблокира само једну, случајно одабрану, нит из скупа чекајућих нити ѕа тај услов. То је ефикасније него одблокиравање свих нити, али постоји опасност: ако случајно изабрана нит и даље не може да настави, она поново постаје блокирана, па ако ниједна друга нит не позове signal, настаје смртоносно блокирање. Напомена. Нит може звати методе await, signalall и signal за условне објекте само када поседује катанац придружен том условном објекту. Цена која мора да се плати када се користи механизам синхронизације за заштиту приступа дељеним подацима јесте успорење.
46 Условни објекти (9) 46/65 java.util.concurrent.locks.lock Condition newcondition() враћа condition објекат придружен текућем катанцу. java.util.concurrent.locks.condition void await() ставља текућу нит у скуп чекајућих нити за текући услов. void signalall() одблокира све нити из скупа чекајућих нити за текући услов. void signal() одблокира једну случајно изабрану нит из скупа чекајућих нити за текући услов.
47 Синхронизовани објекти и методи Интерфејси Lock и Condition додати су у Java SE 5.0 како би омогућили програмерима висок ниво контроле над закључавањем. Међутим, у већини ситуација толика контрола није неопходна, већ се може се користити механизам који је уграђен у Јаву. Сваки објекат у Јави има интерни катанац. Уколико је метод декларисан са кључном речју synchronized, катанац текућег објекта штити читав метод. То значи да нит, да би позвала метод, мора прибавити унутрашњи катанац објекта. 47/65
48 Синхронизовани објекти и Другим речима, public synchronized void metod() { telo metoda је еквивалентно са public void metod() { this.intrinsiclock.lock(); try { telo metoda finally { this.intrinsiclock.unlock(); методи (2) 48/65
49 Синхронизовани објекти и методи (3) Унутрашњи катанац објекта има само један придружени услов. Метод wait додаје нит у скуп чекајућих нити, а методи notifyall и notify одблокиравају нити које чекају. Другим речима, позиви wait и notifyall еквивалентни су са: intrinsiccondition.await и intrinsiccondition.signalall Методи wait, notifyall и notify су final методи класе Object. Методи условних објеката (тј. класе Condition) зову се await, signalall и signal. 49/65
50 Синхронизовани објекти и методи (4) Пример. Класа Banka може се имплементирати на следећи начин: class Banka2 { private double[] racuni; 50/65 public synchronized void transfer(int sa, int na, double iznos) throws InterruptedException { while(racuni[sa] < iznos) wait(); // ceka na jedini uslov unutrasnjeg katanca objekta racuni[sa] -= iznos; racuni[na] += iznos; notifyall(); // obavestava sve niti koje cekaju na uslov public synchronized double getukupnostanje() {
51 Синхронизовани објекти и методи (5) Као што се може видети, коришћење кључне речи synchronized води много концизнијем кôду. Наравно, да би се тај кôд разумео, неопходно је знати да сваки објекат поседује унутрашњи катанац, коме је придружен унутрашњи услов. Катанац управља нитима које покушавају да уђу у synchronized метод. Услов управља нитима које су позвале метод wait. Допуштено је и статички метод класе декларисати као synchronized. Уколико се такав метод позове, он добија унутрашњи катанац придруженог Class објекта. Пример. Да класа Banka има статички synchronized метод, тада би катанац објекта Banka.class био закључан приликом његовог позива. Последица би била да ниједна друга нит не би могла да позове нити тај нити било који други synchronized статички метод исте класе. 51/65
52 Синхронизовани објекти и методи (6) Унутрашњи катанаци и услови имају извесна ограничења. Између осталог: није могуће прекинути нит која покушава да добије катанац није могуће задати timeout период за покушај добијања катанца поседовање само једног услова по катанцу може бити неефикасно. Препорука да ли у кôду користити Lock и Condition објекте или synchronized методе: најбоље је не користити ни једно ни друго. У многим ситуацијама може се користити неки од механизама тј. колекција из пакета java.util.concurrent уколико кључна реч synchronized ради у конретној ситуацији, треба је користити. Тако се пише мање кôда, па је мање грешака. користити катанце и условне објекте ако постоји специфична потребу за додатном моћи коју ове конструкције пружају. 52/65
53 Синхронизовани објекти и методи (7) java.lang.object Сви методи описани на овом слајду могу бити позивани искључиво из синхронизованог метода или блока. Уколико текућа нит не поседује катанац текућег објекта ови методи избацују изузетак IllegalMonitorStateException. void notifyall() одблокира нити које су позвале wait() за текући објекат. void notify() одблокирава једну, случајно изабрану нит од оних које су позвале wait() за текући објекат. void wait() узрокује да нит чека да буде обавештена (енг. notified). void wait(long millis) void wait(long millis, int nanos) узрокују да нит чека док не буде обавештена или док не истекне задата количина времена. Параметри: millis број милисекунди, nanos број наносекунди < 1,000,000 53/65
54 54/65 Проблеми при извршењу нити Катанци и услови не могу решити све проблеме који могу настати у вишенитном програмирању. Приликом паралелног извршавања више нити могу појавити разни проблеми, као што су: Смртоносно блокирање, смртоносни загрљај (енг. deadlock): ситуација кад се све нити нађу у стању блокирања. Живо блокирање (енг. livelock): кад све нити нешто раде, али нема напретка јер су превише заузете одговарањем једна другој да би могле да наставе користан рад. Изгладњивање (енг. starvation): нит није у могућности да добије регуларни приступ дељеном ресурсу. Да би се проблеми избегли, треба озбедити узајамно искључивање критичних секција, приступачност ресирсима за све нити, поштеност у извршавању нити.
55 Смртоносно блокирање 55/65 Смртоносно блокирање описује ситуацију у којој су две или више нити заувек блокиране, јер свака од њих чека неку другу. Пример смртоносног блокирања: раскрсница.
56 Смртоносно блокирање (2) 56/65 Пример. Илуструје смртоносно блокирање. public class SmrtonosniZagrljaj { static class Japanac { private final String name; public Japanac( String name ) { this.name = name; public String getname() { return this.name; public synchronized void naklonise( Japanac kolega ) { System.out.format( "%s: %s" + " se naklonio!%n", this.name, kolega.getname() ); kolega.uzvratinaklon( this ); public synchronized void uzvratinaklon( Japanac kolega ) { System.out.format( "%s: %s" + " je uzvratio naklon!%n", this.name, kolega.getname() );
57 Пример (наставак). public static void main( String[] args ) { final Japanac katsuki = new Japanac( "Tacuaki Katsuki" ); final Japanac honda = new Japanac( "Keisuke Honda" ); new Thread( new Runnable() { public void run() { katsuki.naklonise( honda ); ).start(); new Thread( new Runnable() { public void run() { honda.naklonise( katsuki ); ).start(); Смртоносно блокирање (3) 57/65
58 Смртоносно блокирање (4) 58/65 Пример. Односи се на банку, а илуструје смртоносно блокирање. Размотримо следећу ситуацију: Рачун 1: $200 Рачун 2: $300 Нит 1: Пренос $300 са Рачун 1 на Рачун 2 Нит 2: Пренос $400 са Рачун 2 на Рачун 1
59 Смртоносно блокирање (5) 59/65 Пример (наставак). Јасно је да су нити 1 и 2 блокиране. Ниједна не може да настави јер на рачунима 1 и 2 нема довољно средстава. Да ли је могуће да све нити буду блокиране јер свака чека на још новца? У првој верзији програма смртоносно блокирање се не може десити из једноставног разлога: износ сваког трансфера је највише $1,000. Како имамо 100 рачуна и укупно $100,000 на њима, бар један од рачуна мора имати бар $1,000 у сваком тренутку. Према томе, нит која преноси новац са тог рачуна може наставити са радом. Пример. Међутим, ако се промени метод run тако што се уклони ограничење од $1,000 по трансакцији, може се брзо десити смртоносни загрљај. Ако се нпр. постави BROJ_RACUNA на 10, конструише сваки TransferRunnable са вредношћу max постављеном на 2 * INICIJALNO_STANJE и покрене програм, он ће радити извесно време, а потом стати.
60 Смртоносно блокирање (6) 60/65 Напомена. Када програм стоји, укуцајте комбинацију тастера CTRL+\. Добићете листу свих нити. Свака нит има стек извршавања, који говори где је тренутно блокирана. Пример. Још један начин како би се могао изазвати настанак смртоносног блокирања у примеру банке: учини се i-та нит одговорна за стављање новца на i-ти рачун уместо за подизање новца са њега. У овом случају, постоји шанса да све нити нападну један рачун, свака покушавајући да са њега подигну више новца него што на њему има. Да би се то урадило, само је потребно у оквиру метода run класе Runnable, у позиву метода transfer да се размене аргументи saracun и naracun.
61 Смртоносно блокирање (7) 61/65 Пример. Још једна ситуација у којој једноставно настаје смртоносно блокирање: промене се позиви signalall у signal у програму. Програм ће у неком тренутку стати. Поново, ако се промени и BROJ_RACUNA на 10 то заустављање ће се брже десити. За разлику од signalall који обавештава све нити које чекају на додавање средстава, метод signal одблокира само једну нит. Ако та нит не може наставити, све нити могу постати блокиране.
62 Живо блокирање 62/65 Нит често делује тако што одговара на активности друге нити. Ако је акција те друге нити такође одговор на акцију неке нити, тада може доћи до живог блокирања. Слично као код смртоносног блокирања, нити које су живо блокиране нису у могућносто да даље напредују. Међутим, те нити нису блокиране, већ су само превише заузете одговарањем једна другој да би могле да наставе са корисним послом. Живо блокирање се може упоредити са следећим ситуацијом: двојица учтивих људи (Јапанаца нпр. Катсуки и Хонда ;) ) који су се сучелице срели на пролазу: Катсуки се помера улево да пропусти Хонду, а истовремено се Хонда помера удесно да пропусти Катсукија па су њих двојица и даље блокирани. Како виде да су и даље блокирани, Катцуки се помера дасно а истовремено Хонда иде улево. Они и даље блокирају један другог, па стога...
63 Изгладњивање 63/65 Изгладњивање описује ситуацију када нит није у могућности да добије регуларан приступ дељеном ресурсу и стога нема напретка. Ово се догађа када је дељени ресурс постао недоступан током дугог временског периода, јер га користе похлепне нити. На пример, претпоставимо да објекат садржи синхронизовани метод које ис дуго извршава. Ако један нит често позива тај метод, бдуге нити које такође захтевају синхронизовани приступ истом објекту ће често бити блокиране.
64 Изгладњивање (2) Проблем филозофа који вечерају Hoare, /65 Benjamin D. Esham / Wikimedia Commons. Перуѕето са адресе
65 65/65 Захвалница Велики део материјала који је укључен у ову презентацију је преузет из презентације коју је раније (у време када је он држао курс Објектно орјентисано програмирање) направио проф. др Душан Тошић. Хвала проф. Тошићу што се сагласио са укључивањем тог материјала у садашњу презентацији, као и на помоћи коју ми је пружио током конципцирања и реализације курса. Надаље, један део материјала је преузет од колегинице Марије Милановић. Хвала Марији Милановић на помоћи у реализацији ове презентације.
PowerPoint Presentation
Java konkurentno programiranje Životni ciklus niti i problemi sinhronizacije resursa Multitasking Multithreading Životni ciklus niti http://www.roseindia.net/java/thread/lifecycle-of-threads.shtml Životni
Више3.Kontrlne (upravlja~ke) strukture u Javi
Објектно орјентисано програмирање Владимир Филиповић vladaf@matf.bg.ac.rs Александар Картељ kartelj@matf.bg.ac.rs Низови у програмском језику Јава Владимир Филиповић vladaf@matf.bg.ac.rs Александар Картељ
ВишеPowerPoint Presentation
Објектно орјентисано програмирање Владимир Филиповић vladaf@matf.bg.ac.rs Александар Картељ kartelj@matf.bg.ac.rs Сопствени пакети и унутрашње класе Владимир Филиповић vladaf@matf.bg.ac.rs Александар Картељ
ВишеTutoring System for Distance Learning of Java Programming Language
Deklaracija promenljivih Inicijalizacija promenljivih Deklaracija promenljive obuhvata: dodelu simboličkog imena promenljivoj i određivanje tipa promenljive (tip određuje koja će vrsta memorijskog registra
ВишеMicrosoft PowerPoint - OOPpredavanja05 [Compatibility Mode]
OBJEKTNO ORIJENTISANO PROGRAMIRANJE PREDAVANJE 5 OBJEKTI U INTERAKCIJI Miloš Kovačević Đorđe Nedeljković 1 /25 OSNOVNI KONCEPTI - Abstrakcija - Modularizacija - Objektne reference - Klasni dijagram - Objektni
ВишеFunkcije predavač: Nadežda Jakšić
Funkcije predavač: Nadežda Jakšić funkcije delovi programa koji izvršavaju neki zadatak, celinu; dele na ugrađene, korisničke i main funkciju ugrađene funkcije printf,scanf... da bi se one izvršile potrebno
ВишеTutoring System for Distance Learning of Java Programming Language
Niz (array) Nizovi Niz je lista elemenata istog tipa sa zajedničkim imenom. Redosled elemenata u nizovnoj strukturi je bitan. Konkretnom elementu niza pristupa se preko zajedničkog imena niza i konkretne
ВишеELEKTROTEHNIČKI FAKULTET, UNIVERZITET U BEOGRADU KATEDRA ZA ELEKTRONIKU UVOD U ELEKTRONIKU - 13E041UE LABORATORIJSKA VEŽBA Primena mikrokontrolera
ELEKTROTEHNIČKI FAKULTET, UNIVERZITET U BEOGRADU KATEDRA ZA ELEKTRONIKU UVOD U ELEKTRONIKU - 13E041UE LABORATORIJSKA VEŽBA Primena mikrokontrolera CILJ VEŽBE Cilj ove vežbe je da se studenti kreiranjem
ВишеMicrosoft Word - 11 Pokazivaci
Pokazivači U dosadašnjem radu smo imali prilike da koristimo promenljive koje smo deklarisali na početku nekog bloka. Prilikom deklaracije promenljiva dobija jedinstveni naziv i odgovarajući prostor u
ВишеMicrosoft PowerPoint - Programski_Jezik_C_Organizacija_Izvornog_Programa_I_Greske [Compatibility Mode]
Programski jezik C organizacija izvornog programa Prevođenje Pisanje programa izvorni program Prevođenje programa izvršni program Izvršavanje programa rezultat Faze prevođenja Pretprocesiranje Kompilacija
ВишеVEŽBA 5: KLASE I OBJEKTI U C# Cilj ove vežbe je upoznavanje sa osnovama rada sa klasama i objektima u programskom jeziku C#. Pored toga, bide demonstr
VEŽBA 5: KLASE I OBJEKTI U C# Cilj ove vežbe je upoznavanje sa osnovama rada sa klasama i objektima u programskom jeziku C#. Pored toga, bide demonstrirana upotreba konstruktora, svojstava, metoda klase,
ВишеMicrosoft PowerPoint - Programski_Jezik_C_Organizacija_Izvrsnog_Programa [Compatibility Mode]
Организација извршног програма (Марић, Јаничић: Програмирање 1, 9.3.3) Извршавање програма После успешног превођења (претпроцесирања, компилације, повезивања) програм може да се изврши Извршавање се захтева
ВишеPowerPoint Presentation
Tehnička škola 9. maj Bačka Palanka Programiranje III razred Tok izvršavanja programa Tok izvršavanja programa Dosadašnji kod se izvršavao praktično linearno. Nije postojala nikakva uslovna ili brojačka
ВишеGrananje u programu predavač: Nadežda Jakšić
Grananje u programu predavač: Nadežda Jakšić u okviru linijske strukture izvršavaju se sve naredbe u okviru razgranate strukture uvek se ispituje neki uslov; u zavisnosti od toga da li je uslov ispunjen
ВишеInženjering informacionih sistema
Fakultet tehničkih nauka, Novi Sad Inženjering informacionih sistema Dr Ivan Luković Dr Slavica Kordić Nikola Obrenović Milanka Bjelica Dr Jelena Borocki Dr Milan Delić UML UML (Unified Modeling Language)
ВишеFunkcije predavač: Nadežda Jakšić
Funkcije predavač: Nadežda Jakšić do sada su korišćene "gotove" funkcije iz standardnih biblioteka (cin, cout...) one su pozivane iz main funkcije koja je glavna funkcija u programu jer izvršavanje programa
ВишеTutoring System for Distance Learning of Java Programming Language
Uvod u programiranje dr Ninoslava Savić Predavanja (3) sreda: 11:15 13:50 Učionica 16 Konsultacije sreda: 15 17 h Kabinet 43 Uvod u programiranje Fond časova: 3+3 Broj ESPB: 7 Ocena znanja (max. broj poena
ВишеУвод у организацију и архитектуру рачунара 1
Увод у организацију и архитектуру рачунара 2 Александар Картељ kartelj@matf.bg.ac.rs Напомена: садржај ових слајдова је преузет од проф. Саше Малкова Увод у организацију и архитектуру рачунара 2 1 Секвенцијалне
ВишеTutoring System for Distance Learning of Java Programming Language
Obeležene petlje Obeležene petlje Obeležavanje petlje nekim identifikatorom omogućava da se programski tok usmeri na mesto u programu specificirano tim identifikatorom. Ako se iza naredbi break ili continue
ВишеJEZGRO OPERATIVNOG SISTEMA I UPRAVLJANJE PROCESIMA 1. Šta je jezgro, a šta proces? Jezgro (nukleus ili kernel) je osnovni deo svakog operativnog siste
JEZGRO OPERATIVNOG SISTEMA I UPRAVLJANJE PROCESIMA 1. Šta je jezgro, a šta proces? Jezgro (nukleus ili kernel) je osnovni deo svakog operativnog sistema. U hijerarhijskom (slojevitom) modelu, jezgro je
ВишеSlide 1
Funkcionalno programiranje Interoperabilnost jezika Scala i Java, 2019. Prevođenje u Java bajt kod Svi Java tipovi imaju ekvivalentan tip u jeziku Scala Većina Scala koda se direktno preslikava u odgovarajući
ВишеSlide 1
predmet Inženjerska informatika Operativni sistem dr Anica Milošević Koji operativni sistemi postoje? Microsoft Windows Linux Suse Red Hat Ubuntu Unix 26.1.2018. 2 Šta je Windows operativni sistem? Operativni
ВишеGenerated by Foxit PDF Creator Foxit Software For evaluation only. Operativni sistem U računarstvu, operativni sistem (OS
Operativni sistem U računarstvu, operativni sistem (OS) je kompleksan programski sistem koji kontroliše i upravlja uređajima i računarskim komponentama i obavljanje osnovne sistemske radnje. Operativni
ВишеKDP
Региони Региони Програмска парадигма за приступ критичној секцији Увођење посебне синтаксе за експлицитно означавање критичних секција Обезбеђивање међусобног искључивања процеса Условни критични регион
ВишеUVOD - OD JAVE DO C# ELEMENTARNE RAZLIKE Veliki broj Java/C# razlika su uglavnom preimenovane ključne reči i razlike u konvencijama imenovanja. Neke o
UVOD - OD JAVE DO C# ELEMENTARNE RAZLIKE Veliki broj Java/C# razlika su uglavnom preimenovane ključne reči i razlike u konvencijama imenovanja. Neke od tih jezičkih razlika su: Java kod se prevodi u.class
ВишеUniverzitet u Novom Sadu Tehnički fakultet Mihajlo Pupin Zrenjanin Seminarski rad Predmet: Konkuretno programiranje doc. dr Dejan Lacmanovic Zorica Br
Univerzitet u Novom Sadu Tehnički fakultet Mihajlo Pupin Zrenjanin Seminarski rad Predmet: Konkuretno programiranje doc. dr Dejan Lacmanovic Zorica Brkić SI 29/15 Zrenjanin 2018. Softversko inženjerstvo
ВишеUputstvo za korišćenje Mastercard Identity Check usluge Uputstvo za korišćenje Mastercard Identity Check usluga sigurnijeg plaćanja na internetu
Uputstvo za korišćenje Mastercard Identity Check usluge Uputstvo za korišćenje Mastercard Identity Check usluga sigurnijeg plaćanja na internetu Uputstvo za korišćenje Mastercard Identity Check usluge
ВишеPowerPoint Presentation
Visoka škola strukovnih studija za informacione i komunikacione tehnologije MVC - Modeli Školska 2017/18. Dr Nenad Kojić, dipl. inž. Luka Lukić, struk. inž. Danijela Nikitin, spec.stuk.inž MVC.htaccess
ВишеZbirka resenih zadataka iz arhitekture racunara
Ј. ЂОРЂЕВИЋ, З. РАДИВОЈЕВИЋ, М. ПУНТ, Б. НИКОЛИЋ, Д. МИЛИЋЕВ, Ј. ПРОТИЋ, А. МИЛЕНКОВИЋ АРХИТЕКТУРА И ОРГАНИЗАЦИЈА РАЧУНАРА ПРЕКИДИ, МАГИСТРАЛА И УЛАЗ/ИЗЛАЗ ЗБИРКА РЕШЕНИХ ЗАДАТАКА Београд 2013. i САДРЖАЈ
ВишеRazvoj programa, Code::Blocks, struktura programa, printf, scanf, konverzioni karakteri predavač: Nadežda Jakšić
Razvoj programa, Code::Blocks, struktura programa, printf, scanf, konverzioni karakteri predavač: Nadežda Jakšić projektni zadatak projektovanje programa (algoritmi) pisanje programskog koda, izvorni kod,
ВишеP11.3 Analiza zivotnog veka, Graf smetnji
Поједностављени поглед на задњи део компајлера Међурепрезентација (Међујезик IR) Избор инструкција Додела ресурса Распоређивање инструкција Инструкције циљне архитектуре 1 Поједностављени поглед на задњи
Више12 Stanje
Projektovanje softvera (1) Ime i klasifikacija: (engl. State) objektni uzorak ponašanja Namena: omogućava objektu da pouzdano menja svoje ponašanje kada se menja njegovo unutrašnje stanje izgleda kao da
ВишеRačunarski praktikum I - Vježbe 09 - this, static
Prirodoslovno-matematički fakultet Matematički odsjek Sveučilište u Zagrebu RAČUNARSKI PRAKTIKUM I Vježbe 09 - this, static v2018/2019. Sastavio: Zvonimir Bujanović Pokazivač this Kako funkcija članica
Више1
Testiranje konkurentnih programa Uvod Konkurentni program sadrži dve ili više niti koje se izvršavaju uporedo i rade zajedno da izvrše neki zadatak. Kada se program izvršava, operativni sistem stvara proces
ВишеRačunarske mreže Čas 2 Ivana Tanasijević Matematički fakultet, Beograd 1
Računarske mreže Čas 2 Ivana Tanasijević e-mail: ivana@matf.bg.ac.rs Matematički fakultet, Beograd 1 Utvrđivanje gradiva sa prethodnog časa: popunjavanje adresne strukture, kreiranje soketa, privezivanje
ВишеMicrosoft PowerPoint - vezbe 4. Merenja u telekomunikacionim mrežama
Merenja u telekomunikacionim mrežama Merenja telefonskog saobraćaja Primer 1 - TCBH Na osnovu najviših vrednosti intenziteta saobraćaja datih za 20 mernih dana (tabela), pomoću metode TCBH, pronaći čas
ВишеMicrosoft PowerPoint - 13-Funkcije_2.ppt [Compatibility Mode]
Osnove programiranja Funkcije - Metode Prenos parametara Po vrednosti Po referenci Po izlazu Sadržaj Opseg važenja promenljive u drugim strukturama Rekurzije Prenos parametara Metoda može vratiti isključivo
ВишеКласе комбинација презентације (Хортона) и к о бајаги скрипте (Ово је прича коју врло радо причам) нови тип података: дефинишу могуће вредности подата
Класе комбинација презентације (Хортона) и к о бајаги скрипте (Ово је прича коју врло радо причам) нови тип података: дефинишу могуће вредности података и операције над њима Дефиниција класе садржи само
ВишеPROMENLJIVE, TIPOVI PROMENLJIVIH
PROMENLJIVE, TIPOVI PROMENLJIVIH Šta je promenljiva? To je objekat jezika koji ima ime i kome se mogu dodeljivati vrednosti. Svakoj promenljivoj se dodeljuje registar (memorijska lokacija) operativne memorije
Више06 Poverljivost simetricnih algoritama1
ЗАШТИТА ПОДАТАКА Симетрични алгоритми заштите поверљивост симетричних алгоритама Преглед биће објашњено: коришћење симетричних алгоритама заштите како би се заштитила поверљивост потреба за добрим системом
ВишеVjezbe
SOFTVERSKO INŽENJERSTVO Vježbe 8: Activity dijagrami Robert Manger Sveučilište u Zagrebu PMF-Matematički odsjek Akademska godina 2018/2019. Sadržaj Vježbi 8 Općenito o activity dijagramima Aktivnosti,
ВишеMicrosoft PowerPoint - C-4-1
Pregled iskaza u C-u Izraz; Iskaz dodele, serijski komponovani iskaz; blok Uslovni iskazi i izrazi; složeno grananje Iterativni iskazi Iskaz dodele Promena vrednosti a = Ψ; Izračunava vrednost izraza Ψ,
Више1, 2, 3, кодирај! Активности циклуса 4 Пројект «Аркадне игре» - Час 6: Програмирање падања новчића (наставак) Доминантна дисциплина Математикa Резиме
1, 2, 3, кодирај! Активности циклуса 4 Пројект «Аркадне игре» - Час 6: Програмирање падања новчића (наставак) Доминантна дисциплина Математикa Резиме Програмирање добијања награда омогућује ученицима да
ВишеMicrosoft Word - MySQL_3.doc
7. Data Manipulation Language (DML) Jezik za rad sa podacima (Data Manipulation Language (DML)) služi za umetanje, brisanje i ažuriranje podataka u bazi. 7.1. Umetanje novih redova u tabelu INSERT sintaksa
ВишеMicrosoft Word - privitak prijedloga odluke
Informatički sustav za prikupljanje, simulaciju i prikaz podataka o cijenama javnih komunikacijskih usluga (dalje: Sustav e-tarife) Zagreb, HRVATSKA AGENCIJA ZA POŠTU I ELEKTRONIČKE KOMUNIKACIJE Roberta
ВишеP2.1 Projektovanje paralelnih algoritama 1
Projektovanje paralelnih algoritama I Uvod Osnove dinamičke paralelizacije 1 Primer: Fibonačijev niz Primer rekurz. računanja Fibonačijevih brojeva: F 0 = 0; F 1 = 1; F i = F i -1 + F i -2 za i 2 Algoritam
ВишеKorisničko uputstvo mobilne aplikacije Digitalni Kiosk 1
Korisničko uputstvo mobilne aplikacije Digitalni Kiosk 1 Sadržaj Opis mobilne aplikacije Digitalni Kiosk... 3 Pokretanje aplikacije... 3 Registracija/Kreiranje novog korisničkog naloga... 3 Dodavanje platne
ВишеСТАРТ - СТОП АПЛИКАЦИЈА - КОРИСНИЧКО УПУТСТВО
СТАРТ - СТОП АПЛИКАЦИЈА - КОРИСНИЧКО УПУТСТВО - 03.05.2019 Приступ SMARTPHONE апликацији (Android/iOS) и СТАРТ-СТОП WEB порталу подразумева закључење претплатничког уговора за коришћење интернет апликације
ВишеMrežno računarstvo
MREŽNO RAČUNARSTVO Soketi za servere (iz glave 9,10 u 4. izdanju) 1 Soketi za servere klijenti programi koji otvaraju soket do servera koji osluškuje konekcije klijentski soketi nisu dovoljni klijenti
ВишеDodatne usluge za VOIP priključak:
Dodatne usluge za IP telefonski priključak (tip korištenog modema- Billion): Usluga Opis/način korištenja Prezentacija telefonskog broja pozivaoca Ovom uslugom korisnik dobiva mogućnost prikaza telefonskog
ВишеModem i lokalna mreža Vodič za korisnika
Modem i lokalna mreža Vodič za korisnika Copyright 2009 Hewlett-Packard Development Company, L.P. Ovde navedene informacije podložne su promeni bez prethodne najave. Garancije za HP-ove proizvode i usluge
ВишеПрограмирај!
Листе Поред појединачних вредности исказаних бројем или ниском карактера, често је потребно забележити већи скуп вредности које су на неки начин повезане, као, на пример, имена у списку путника у неком
ВишеСТАРТ - СТОП ПАРКИНГ СИСТЕМ КОРИСНИЧКО УПУТСТВО страна 1 од 12
СТАРТ - СТОП ПАРКИНГ СИСТЕМ КОРИСНИЧКО УПУТСТВО страна 1 од 12 РЕГИСТРАЦИЈА НА СТАРТ-СТОП ПАРКИНГ СИСТЕМ За коришћење СТАРТ-СТОП ПАРКИНГ система, корисник (физичко или правно лице) попуњава упитник у просторијама
ВишеPOSLOVNI INFORMACIONI SISTEMI I RA^UNARSKE
ZNAČAJ RAČUNARSKIH KOMUNIKACIJA U BANKARSKOM POSLOVANJU RAČUNARSKE MREŽE Računarske mreže su nastale kombinacijom računara i telekomunikacija dve tehnologije sa veoma različitom tradicijom i istorijom.
ВишеQFD METODA – PRIMER
QFD METODA - PRIMER PROBLEM: U kompaniji X koja se bavi izradom kompjuterskih softvera uočen je pad prodaje konkretnog softvera - Softver za vođenje knjigovodstva. Kompanija X je raspolagala sa jednom
ВишеMicrosoft PowerPoint - GR_MbIS_12_IDEF
Menadžment poslovnih informacionih sistema - 12 metode modeliranja funkcija pripremila Doc. dr Gordana Radić Integfated DEFinition Definicija: je metoda (jezik) modeliranja bazirana je na kombinaciji grafike
ВишеPodela ra~unarskih sredtava
Објектно орјентисано програмирање Владимир Филиповић Александар Картељ kartelj@matf.bg.ac.rs 2/56 Карактеристике програмског језика Јава Владимир Филиповић Александар Картељ kartelj@matf.bg.ac.rs Настанак
ВишеProjektna dokumentacija Boostowski - mobile
Projektna dokumentacija Boostowski - mobile OPIS BUDUĆEG PROCESA - MOBILNA APLIKACIJA 00 Dobrodošli Ekran dobrodošlice je prvi ekran koji se prikazuje nakon ulaska u mobilnu aplikaciju. Na njemu je ispisana
ВишеVALIDNOST CERTIFIKATA ZA PRISTUP INTERNET APLIKACIJAMA POREZNE UPRAVE FEDERACIJE BOSNE I HERCEGOVINE (npis I ejs)
VALIDNOST CERTIFIKATA ZA PRISTUP INTERNET APLIKACIJAMA POREZNE UPRAVE FEDERACIJE BOSNE I HERCEGOVINE (NPIS I EJS) POREZNA UPRAVA FEDERACIJE BOSNE I HERCEGOVINE Sektor za informacione tehnologije Sarajevo,
ВишеPages from 5527 lite guick guide from PDF - prevod_IO_FC - Serbian.doc
Pregled LCD ekran 1. Poklopac baterije 2. Taster za blokiranje 3. Poklopac USB konektora 4. USB konektor 5. Uključivanje/isključivanje i Reprodukcija/pauziranje 6. Jačina zvuka 7. MENI 8. Fn A B 9. REC
ВишеMicrosoft PowerPoint - 12-Funkcije_1.ppt [Compatibility Mode]
Osnove programiranja Funkcije - Metode http://www.introprogramming.info/english-intro-csharp-book/read-online/ Sadržaj Funkcije Metode Definisanje Pozivanje Povratne vrednosti Parametri Metode (1) Metoda
ВишеProjekti šabloni
Projekti obrasci Kreiranje objekata Uvod Enkapsuliraju znanje o tome koje konkretno klase koristi sistem Sakrivaju instanciranje objekata i načine na koji se oni povezuju i reprezentuju Ostatak sistema
ВишеAKVIZICIJA PODATAKA SA UREĐAJEM NI USB-6008 NI USB-6008 je jednostavni višenamjenski uređaj koji se koristi za akviziciju podataka (preko USBa), kao i
AKVIZICIJA PODATAKA SA UREĐAJEM NI USB-6008 NI USB-6008 je jednostavni višenamjenski uređaj koji se koristi za akviziciju podataka (preko USBa), kao i za generisanje željenih izlaznih signala (slika 1).
ВишеОрт колоквијум
II колоквијум из Основа рачунарске технике I - 27/28 (.6.28.) Р е ш е њ е Задатак На улазе x, x 2, x 3, x 4 комбинационе мреже, са излазом z, долази четворобитни BCD број. Ако број са улаза при дељењу
ВишеUvod u računarstvo 2+2
Ulaz i izlaz podataka Ulaz i izlaz podataka Nakon odslušanog bit ćete u stanju: navesti sintaksu naredbi za unos/ispis znakova znakovnih nizova cijelih brojeva realnih brojeva jednostruke i dvostruke preciznosti
ВишеSlide 1
OSNOVNI POJMOVI Naredba je uputa računalu za obavljanje određene radnje. Program je niz naredbi razumljivih računalu koje rješavaju neki problem. Pisanje programa zovemo programiranje. Programski jezik
ВишеP3.2 Paralelno programiranje 2
Paralelno programiranje II Analiza zavisnosti Struktura algoritma Pomoćne strukture Komunikacioni šabloni 1 4 Koraka paralelizacije programa 2 Evo algoritma. Gde je paralelizam? Dekompozicija zadataka
ВишеProgramiranje za UNIX Okruženje unix procesa
Programiranje za UNIX Okruženje unix procesa Sadržaj Memorijska slika UNIX procesa Argumenti naredbenog retka i varijable okruženja Životni ciklus procesa Izlazni status procesa 2 Memorijska slika UNIX
ВишеPowerPoint Presentation
Prof. dr Pere Tumbas Prof. dr Predrag Matkovid Identifikacija i izbor projekata Održavanje sistema Inicijalizacija projekata i planiranje Implementacija sistema Dizajn sistema Analiza sistema Faze životnog
ВишеPrimenjeno programiranje - Vežbe
VISOKA POSLOVNA ŠKOLA STRUKOVNIH STUDIJA NOVI SAD Primena integrisanih razvojnih alata Java i NetBeans IDE 7.0 vežba 9 i 10 Kreiranje desktop aplikacije sa konekcijom na bazu Pokrenuti NetBeans, u kartici
ВишеЖИРОКЛИРИНГ И БРУТО ПОРАВНАЊЕ У РЕАЛНОМ ВРЕМЕНУ (БПРВ) ОПИС РАДА СИСТЕМА На основу Закона о Централној банци БиХ у којем стоји: Основни задаци Централ
ЖИРОКЛИРИНГ И БРУТО ПОРАВНАЊЕ У РЕАЛНОМ ВРЕМЕНУ (БПРВ) ОПИС РАДА СИСТЕМА На основу Закона о Централној банци БиХ у којем стоји: Основни задаци Централне банке који се извршавају под надлежношћу њеног Управног
ВишеDomaći zadatak - GUI (rok za sve grupe je ) Napraviti repozitorijum na GitHub-u koji se zove MenjacnicaGUI i postaviti Eclipse projekat menj
Domaći zadatak - GUI (rok za sve grupe je 10.5.2017.) Napraviti repozitorijum na GitHub-u koji se zove MenjacnicaGUI i postaviti Eclipse projekat menjacnicagui koji je povezan sa ovim repozitorijumom.
ВишеFAMILY SAFETY - PORODIČNA BEZBJEDNOST Program Family safety veoma je koristan za ograničavanje sadržaja i aplikacija koje učenici mogu koristiti na šk
FAMILY SAFETY - PORODIČNA BEZBJEDNOST Program Family safety veoma je koristan za ograničavanje sadržaja i aplikacija koje učenici mogu koristiti na školskim računarima. Potpuno je besplatan, tako da ga
ВишеUniverzitet u Nišu Prirodno-Matematički fakultet Marko D. Petković OSNOVI KONKURENTNOG PROGRAMIRANJA SA ZBIRKOM ZADATAKA Niš, 2010
Univerzitet u Nišu Prirodno-Matematički fakultet Marko D. Petković OSNOVI KONKURENTNOG PROGRAMIRANJA SA ZBIRKOM ZADATAKA Niš, 2010 Dr Marko D. Petković, docent Prirodno-Matematičkog fakulteta u Nišu Godina
ВишеKontrola korisnickih racuna (UAC) pomaze tako sto sprecava potencijalno stetne programe da izvrse promene u vasem racunaru i obavestava vas pre izvrse
Kontrola korisnickih racuna (UAC) pomaze tako sto sprecava potencijalno stetne programe da izvrse promene u vasem racunaru i obavestava vas pre izvrsenja svake promene a koje zahtevaju administratorsku
ВишеMicrosoft Word - Uputstvo za upotrebu studentskih servisa.doc
Упутство за пријаву на студентске сервисе и пријаву испита Адреса на којој се налазе студенски сервиси је https://student.unibl.org У питању је интернет страница заштићена SSL 3.0 протоколом који изискује
ВишеM-3-699
РЕПУБЛИКА СРБИЈА МИНИСТАРСТВО ЕКОНОМИЈЕ И РЕГИОНАЛНОГ РАЗВОЈА ДИРЕКЦИЈА ЗА МЕРЕ И ДРАГОЦЕНЕ МЕТАЛЕ 11 000 Београд, Мике Аласа 14, поштански фах 384 телефон: (011) 328-2736, телефакс: (011) 2181-668 На
ВишеNIAS Projekt e-građani KORISNIČKA UPUTA za aplikaciju NIAS Verzija 1.1 Zagreb, srpanj 2014.
Projekt e-građani KORISNIČKA UPUTA za aplikaciju Verzija 1.1 Zagreb, srpanj 2014. Naslov: Opis: Korisnička uputa za aplikaciju Dokument sadrži upute korisnicima aplikacije u sustavu e-građani Ključne riječi:
ВишеOpticum HD - Uputstvo za skeniranje kanala.docx
SKENIRANJE KANALA Ukoliko već imate memorisane kanale, potrebno je da prije početka skeniranja izbrišete sve kanale, a to ćete uraditi na sljedeći način: Pritisnite dugme MENU na daljinskom upravljaču,
ВишеШкола Ј. Ј. Змај Свилајнац МЕСЕЧНИ ПЛАН РАДА ЗА СЕПТЕМБАР Школска 2018 /2019. Назив предмета: Информатика и рачунарство Разред: 5. Недељни број часова
Школа Ј. Ј. Змај Свилајнац МЕСЕЧНИ ПЛАН РАДА ЗА СЕПТЕМБАР јединице 1. 1. Увод у информатику и рачунарство 1. 2. Oрганизација података на рачунару 1. 3. Рад са текстуалним документима 1. 4. Форматирање
ВишеP1.0 Uvod
Системска програмска подршка у реалном времену 1 Миодраг Ђукић miodrag.djukic@rt-rk.uns.ac.rs www.rt-rk.uns.ac.rs 1 Системска програмска подршка у реалном времену 1 програмска подршка = софтвер Системски
ВишеMicrosoft PowerPoint - 07-DinamickeStrukturePodataka
Динамичке структуре података листа, стек, ред Програмирање 2: глава 6 Динамичке структуре података Динамичка алокација и динамичке структуре података Најзначајније динамичке структуре података листе и
ВишеPHP proširenja za rad sa bazama podataka Postoje pojedinačna proširenja za različite tipove baza podataka sa svojim bibliotekama funkcija npr. postoji
PHP proširenja za rad sa bazama podataka Postoje pojedinačna proširenja za različite tipove baza podataka sa svojim bibliotekama funkcija npr. postoji podrška za IBM DB2, Oracle, Ingres, MySQL, PostgreSQL,
ВишеR u z v e l t o v a 5 5, B e o g r a d, t e l : ( ) , m a i l : c o n t a c p s i t. r s, w w w. p s i t. r s
UPUTSTVO ZA BRZO UMREŽAVANJE PROGRAMA MPP2 Da bi program MPP2 radio u mrežnom okruženju po sistemu klijent-server, potrebno je da se na računarima koji su mrežno povezani instalira: serverska verzija programa
ВишеWeb orijentirana rješenja u turizmu
JAVA PARALELIZACIJA Zlatko Sirotić, univ.spec.inf. d.o.o. Pula Stranica 1 = Istra informatički inženjering (staro ime) Poduzeće osnovano prije 25 godina Stranica 2 Autor je (bar neko vrijeme) radio i sa
ВишеMicrosoft PowerPoint - JavaP9_2019
Programski jezik JAVA PREDAVANJE 9 2019 www.etf.ac.me Datoteke u Javi U paketu java.io nalaze se klase za rad sa datotekama i direktorijumima. Funkcionalnost koju omogućavaju te klase sastoji se od kreiranja,
ВишеP1.2 Projektovanje asemblera
ПРОЈЕКТОВАЊЕ АСЕМБЛЕРА Асемблер Модули асемблера 1 Дефинисање новог лингвистичког нивоа превођењем Потребан преводилац алат који преводи програм написан на једном језику (на једном лингвистичком нивоу)
ВишеMemorandum color za slanje om
INFORMACIJE O USLUZI PROMENE PLATNOG RAČUNA BANKA NAZIV ADRESA Internet adresa Vojvođanska banka a.d. Novi Sad Trg Slobode 5, Novi Sad www.voban.rs Opšte informacije o usluzi promene računa Kratak opis
ВишеMicrosoft Word - Uputstvo za upotrebu studentskih servisa.doc
Упутство за пријаву на студентске сервисе и пријаву испита Адреса на којој се налазе студенски сервиси је https://student.vps.ns.ac.rs/ У питању је интернет страница заштићена SSL 3.0 протоколом који изискује
ВишеPrilog 1 - Informacije o usluzi promene platnog računa Verzija 2
Verzija 2 Informacije o usluzi promene platnog računa BANKA NAZIV Komercijalna banka A.D. Beograd ADRESA Svetog Save 14, 11000 Beograd Internet adresa www.kombank.com Opšte informacije o usluzi promene
ВишеRačunarski praktikum I - Vježbe 07 - Podstrukture, const, reference
Prirodoslovno-matematički fakultet Matematički odsjek Sveučilište u Zagrebu RAČUNARSKI PRAKTIKUM I Vježbe 07 - Podstrukture, const, reference v2018/2019. Sastavio: Zvonimir Bujanović Podstrukture Član
ВишеUPUTSTVO ZA KRETANJE KROZ EON KORISNIČKI INTERFEJS 1
1 Dobrodošli u EON svijet! SADRŽAJ: 1. EON korisnički interfejs...3 1.1 Početna...3 1.2 Kanali...3 1.2.1 Upravo na TV-u...3 1.2.2 TV kanali...4 1.2.3 Radio kanali...4 1.3 Video klub...5 1.4 Moji sadržaji...5
ВишеMicrosoft PowerPoint - Bitovi [Compatibility Mode]
Оператори над битовима (Јаничић, Марић: Програмирање 2, тачка 5.6) Оператори за рад са појединачним битовима Само на целобројне аргументе: ~ битовска негација & битовска конјункција (и) битовска (инклузивна)
ВишеINTEGRIRANI KNJIŽNIČNI SUSTAV Sustav za podršku Upute za instalaciju: Aleph v22 ZAG
INTEGRIRANI KNJIŽNIČNI SUSTAV Sustav za podršku Upute za instalaciju: Aleph v22 ZAG INTEGIRANI KNJIŽNIČNI SUSTAV Upute za instalaciju: Aleph v22 ZAG Nacionalna i sveučilišna knjižnica u Zagrebu Ul. Hrvatske
ВишеMicrosoft PowerPoint - 6. CMS [Compatibility Mode]
Visoka škola strukovnih studija za informacione i komunikacione tehnologije Beograd WEB TEHNOLOGIJE Drupal CMS(Content Managment System) Školska 2012/13. Marko M. Spasojević, spec. inž. Dr Nenad Kojić,
ВишеLAB PRAKTIKUM OR1 _ETR_
UNIVERZITET CRNE GORE ELEKTROTEHNIČKI FAKULTET STUDIJSKI PROGRAM: ELEKTRONIKA, TELEKOMUNIKACIJE I RAČUNARI PREDMET: OSNOVE RAČUNARSTVA 1 FOND ČASOVA: 2+1+1 LABORATORIJSKA VJEŽBA BROJ 1 NAZIV: REALIZACIJA
ВишеINDIKATOR SVJETLA FUNKCIJE TIPKI 1. Prikazuje se temperatura i parametri upravljanja 2. Crveno svjetlo svijetli kad grijalica grije 3. Indikator zelen
INDIKATOR SVJETLA FUNKCIJE TIPKI 1. Prikazuje se temperatura i parametri upravljanja 2. Crveno svjetlo svijetli kad grijalica grije 3. Indikator zelenog svjetla koji prikazuje sniženu temperaturu. Uključuje
ВишеMicrosoft PowerPoint - 03-Slozenost [Compatibility Mode]
Сложеност алгоритама (Програмирање 2, глава 3, глава 4-4.3) Проблем: класа задатака истог типа Велики број различитих (коректних) алгоритама Величина (димензија) проблема нпр. количина података које треба
ВишеPowerPoint Presentation
Mehanizmi čuvanja podataka baznog sustava za potrebe Billing aplikacije Autor: Domagoj Dukarić, HEP ODS d.o.o. Koautor: Mario Blažanović, HEP ODS d.o.o. Ukratko o Oracle bazi Instanca memorijske strukture
ВишеRačunarski softver Da bi računarski sistem mogao da radi, pored hardvera mora biti opremljen i odgovarajućim programima koji će njime upravljati.ova k
Računarski softver Da bi računarski sistem mogao da radi, pored hardvera mora biti opremljen i odgovarajućim programima koji će njime upravljati.ova komponenta računarskog sistema se zove SOFTVER(software
Више