Home - qdidactic.com
Didactica si proiecte didacticeBani si dezvoltarea cariereiStiinta  si proiecte tehniceIstorie si biografiiSanatate si medicinaDezvoltare personala
referate stiintaSa fii al doilea inseamna sa fii primul care pierde - Ayrton Senna





Aeronautica Comunicatii Drept Informatica Nutritie Sociologie
Tehnica mecanica


Informatica


Qdidactic » stiinta & tehnica » informatica
Programarea Paralela Multitasking



Programarea Paralela Multitasking


Programarea Paralela

Multitasking



Exista doua tipuri de multitasking:

multitasking bazat pe procese;

multitasking bazat pe fire de executie (thread).


Un proces este un program aflat in executie.


Multitasking bazat pe procese. Presupunem faptul ca se executa in paralel mai multe procese. Sistemele de

operare moderne permit multitasking.


Multitasking bazat pe fire de executie. In cadrul aceluiasi program se executa mai multe secvente de cod in paralel.

Programele care lucreaza cu dispozitive de intrare/iesire, sau programele folosite in controlul proceselor industriale sunt partial candidate pentru multitasking cu fire de executie, deoarece atat procesele industriale cat si procesele de intrare/iesire sunt mult mai lente decat procesorul.

In timp ce procesorul asteapta un raspuns de la un proces poate sa faca altceva in paralel.


Starile unui fir de executie sunt:





starea de executie (RUNNING). Cand procesorul executa secventa de cod din firul e executie;

bloked, stare in care se asteapta eliberarea unei resurse;

suspendat, se asteapta scurgerea unei perioade de timp specificat;

la iesirea din aceste stari, firul de executie nu intra direct in starea RUNNING ci intra intr-o stare gata de executie (ready);

ultima stare este terminat.


In Java firele de executie se bazeaza pe clasa "thread" si pe interfata "Runable". Clasa thread face parte din

pachetul java.lang.

Punctul de intrare intr-un fir de executie (prima instructiune executata de procesor intr-un fir de executie) este prima instructiune din metoda Run, cu semnatura "public void run ( )".

Chiar daca nu se creeaza explicit, orice aplicatie are un fir de executie denumit main thread.

In clasa Thread sunt definite mai multe metode utilizate pentru lucrul cu fire de executie si anume:



* final String getName ( )

Cuvantul cheie "final" inseamna ca aceasta metoda nu poate sa fie redefinita intr-o clasa derivata din clasa thread.


* final int getPriority ( ), returneaza un numar intreg, care specifica prioritatea threadului;

* final boolean isAlive ( ), returneaza true daca firul de executie curent este in starea running;

* final void join ( ), este o metoda in care se asteapta terminarea unui fir de executie pentru terminarea firului de executie curent;

* void run ( ), este punctul de intrare in firul de executie si tot ce se face in firul de executie este codificat in aceasta metoda;

* static void sleep (long milisec). Firul curent de executie este trecut in starea suspendat pana la scurgerea timpului specificat in argument.

* void start ( ). Se foloseste pentru a starta executia unui fir si ea la randul ei apeleaza automat metoda "run".


Nu exista nici un proces fara cel putin un fir de executie.

In Java exista doua posibilitati de a crea fire de executie:


a)     prin extinderea clase thread;

b)     cu ajutorul interfetei Runnable. Se prefera aceasta metoda.

Interfata Runnable declara metoda public void run ( ).

Executia unui thread se incheie atunci cand se termina metoda run.

Crearea unui thread se face in trei pasi:

creez un obiect din clasa ce implementeaza interfata runnable.

My Runnable r = new MyRunnable ( . );

creez firul de executie propriu-zis pe baza obiectului anterior:

Thread fir = newThread (r);

3) startam firul de executie: fir.start ( );


La inceput:


class MyRunnable implements Runnable


// si alte metode;

. . . . . . . . .

}


Un exemplu de aplicatie cu fire de executie: O aplicatie de mail in care, in timp ce editez un mesaj pot receptiona in paralel alte mesaje.


Exemplu complex de fire de executie: crearea unei aplicatii server bazata pe fire de executie. Aplicatia client server bazata pe socket.

Serverul sta intr-o bucla infinita sateptand conectarea unui client. La conectarea unui client, creeaza pentru acesta un fir de executie. Partea de tratare a clientului se gaseste in metoda "run" a firului de executie. In principiu, clientul comunica cu serverul prin mesaje text (stringuri). In aplicatia noastra serverul citeste textul de la client si ii spune daca este valid sau nu.



import java.net.*;

import java.io.*;

class Server


}catch (IOException e)

}



Scriem in continuare clasa MyRunnable.


class MyRunnable implements Runnable

catch (IOException e)

}

public void run ( )

catch (IOException e )

}

}








Contact |- ia legatura cu noi -| contact
Adauga document |- pune-ti documente online -| adauga-document
Termeni & conditii de utilizare |- politica de cookies si de confidentialitate -| termeni
Copyright © |- 2024 - Toate drepturile rezervate -| copyright