SlideShare a Scribd company logo
PROGRAMACIÓ
 CONCURRENT


       Recursos per la
         concurrència
PER QUÈ ÉS NECESSÀRIA LA
    PROGRAMACIÓ CONCURRENT?
(1) Per la utilització completa del processador




(2) Paral·lelisme entre la
CPU i els dispositius d’E/S
PER QUÈ ÉS NECESSÀRIA LA
    PROGRAMACIÓ CONCURRENT?

(3) Per poder expressar el
paral·lelisme     potencial  que
existeix per fer que més d’un
ordinador es pugui utilitzar per
resoldre el problema.

Per exemple, per trobar la sortida
a un laberint.
PER QUÈ ÉS NECESSÀRIA LA
PROGRAMACIÓ CONCURRENT?
PLATAFORMA D’EXECUCIÓ
     CONCURRENT
PROGRAMES CONCURRENTS I
         PROCESSOS
Un programa concurrent es concep com un CONJUNT
 DE THREADS o FILS DE CONTROL.
Cada THREAD executa una única activitat seqüencial.
Cada THREAD s’executa en el seu propi processador
 virtual executant independentment accions d’acord
 amb l’activitat que tingui associada .
Els THREADs concurrents intercanvien entre ells
 missatges amb informació i missatges de sincronisme.
ASPECTES DELS PROCESSOS
Cada entorn de programació concurrent necessita
 establir algunes característiques sobre els seus
 processos:
   Naturalesa dels processos.
   Jerarquia dels processos.
   Mecanismes de inicialització.
   Mecanismes de finalització.
   Formes de declaració.
NATURALESA DELS PROCESSOS
Els processos poden ser:
    Estàtics: Són instanciats al començament del programa. El
     programador es declara explícitament.
    Dinàmics: Són creats durant l’execució del programa, en
     funció de les dades.
En funció dels processos que poden existir en un
 sistema es classifiquen com:
    Sistema tancat: S’ha de tenir un coneixement en temps
     disseny (estàtic) sobre els processos que construeixen en el
     sistema i la seva activitat.
    Sistema obert: El número de processos que constitueixen el
     sistema varia en el temps de forma que no es pot predir
     (fase de disseny), per exemple, perquè crea dinàmicament
     processos.
JERARQUIA DELS PROCESSOS
Els processos d’un programa es poden organitzar en:
    Estructura plana: Tots els processos són equivalents.
     Evolucionen i finalitzen independentment (processos
     UNIX).



    Estructura jerarquitzada: Entre els processos existeixen
     unes relaciones de dependència amb estructura d’arbre.
     Un procés no finalitza fins que els processos que en
     depenen no finalitzen.
INCIALITZACIÓ DELS PROCESSOS
Inicialitzar un procés és transferir-li, després de la
 seva creació, la informació que requereix per
 caracteritzar-lo individualment.
Existeixen diferents categories:

    A UNIX, cada procés és inicialment una rèplica del seu pare.
    A JAVA, en la creació s’estableixen uns paràmetres de
     incialització.
    Després de la creació, el fill comunica amb el seu pare i rep
     la informació de incialització.
FINALITZACIÓ DELS PROCESSOS
Existeixen múltiples formes de finalització d’un procés:
    Quan la línia de flux de control assoleix el final (amb èxit).
    Quan es produeix una excepció no atesa (amb fallida).
    Quan un procés executa una sentència “self terminate” (amb
     fallida).
    Quan el procés és avortat per un altre procés (amb fallida).
    Quan es dóna una finalització coordinada “terminate” (amb
     èxit).
    O bé, mai..
DECLARACIÓ DE PROCESSOS
           CONCURRENTS
Declaració per sentències estructurades
       cobegin
                    procés_1, procés_2, .., procés_n
       coend
Declaració com a components de bloc
       procedure Pare;
                     process procés_1, begin .... end;
                     process procés_2, begin .... end;
       begin ... End;
Bifurcació (fork)
       ......
       {if (fork()==0)
                     { ... } // Solament s’executa en el procés fill
       else
                     { ... } // S’executa solament en el procés pare
       }
Invocació no estructurada
ESTATS D’UN PROCÉS
ESTATS D’UN PROCÉS EN UN ENTORN
          MULTIPROCÉS
Diagrama bàsic d’estats d’un procés en temps real
CLASSES RELACIONADES AMB ELS FILS

 El llenguatge de programació Java proporciona suport
  pels fils (un fil és un únic flux d’execució dins d’un
  procés) mitjançant una interfície i un conjunt de
  classes.
 La interfície de Java i les classes que inclouen
  funcionalitat:
   Threads
   Runnable
   Object Thread
CLASSES RELACIONADES AMB ELS FILS
             Thread
 És la classe responsable de produir fils funcionals per
  altres classes.

 Per afegir la funcionalitat de fil a una classe, aquesta
  es deriva de Thread i s’ignora el mètode run.

 La classe Thread també defineix els mètodes start i
  stop.
CLASSES RELACIONADES AMB ELS FILS
            Runnable
 Java no suporta l’herència múltiple de forma directa.

 Aquesta interfície proporciona la capacitat d’afegir la
  funcionalitat d’un fil a una classe implementant la
  interfície.
CLASSES RELACIONADES AMB ELS FILS
              Object
 No es tracta d’una classe de suport als fils.

 La classe Object proporciona mètodes com wait,
  notify i notifyAll.
CREACIÓ DEL FILS
 A Java, la creació de nous fils és molt més ràpida que
  la creació de nous processos.

 A Java, en el procés de creació de fils, hi ha dos
  mecanismes que ens permetran portar-ho a terme:
   Estenent la classe Thread.
   Implementant la interfície Runnable.

   En ambdós casos, s’ha de definir un
              mètode run.
CREACIÓ DEL FILS
                      La classe Thread
class classeConcurrent extends Thread {
            // .. Mètodes                  Aquesta és la tasca que serà
            // .. Atributs                 CONCURRENT
       public void run () {
            // .. Sentències
            // .. Sentències


    class ElMeuPrograma {
           public static void main (String [] args) {
                       classeConcurrent tasca1, tasca2;
                       tasca1=new classeConcurrent ();       Declaració i creació
                       tasca2=new classeConcurrent ();       d’objectes (NORMAL)
                       // .. Més sentències
                       tasca1.start();
                                                       Iniciar tasca1 concurrentment
                       tasca2.start();
                       // .. Més sentències            amb main (). Invocar a
                                                    tasca1.run() i tornar
                                                    immediatament.
CREACIÓ DEL FILS
    La classe Thread - Conclusions
 Un objecte concurrent pertany a una classe que estén
  Thread.

 S’ha de tornar a definir el mètode run () que
  especifica la tasca concurrent.

 L’execució de la tasca concurrent es realitza
  mitjançant el mètode start () (heretat del Thread)
CREACIÓ DEL FILS
      La classe Thread – Exemple: Fil
class Fil extends Thread {                        La classe de la que els objectes
             public fil (String str) {            han de ser concurrents
                 super (str)           // invoquem directament al constructor
             }

      public void run () { La tasca que serà concurrent
          for (int i = 0; i <10; i++) {
                System.out.println (i+” “+getName());
          try {
                sleep ((long) (Math.random() *1000); Atura l’execució del fil
                } catch (InterruptedExecution e) {}   (“dorm”)
          }
               System.out.println (“Fi “+getName ());
               }
           }
CREACIÓ DEL FILS
     La classe Thread – Exemple: Test
public class VarisFils {
                                                         Pas 1: Creo de la classe que
                                                         llençarà els fils
            public static void main (String [] args) {
                fil u, dos;
            //s’intstancia el Thread
                 u=new fil (“Hobitton”);                 Pas 2: Invoco a l’operador
                 dos=new fil (“Mordor”);                 new per crear els fils
            //Inicia el que tingui el seu mètode run()
                 u.start();
                                                         Pas 3: Invoco al mètode start ()
                 dos.start();
                                                         de cada fil. Aquest mètode
            System.out.println (“main no fa res”);       arrenca el fil e invoca el mètode
            }                                            run().
     }
CREACIÓ DEL FILS
             La interfície runnable
 Implementar la interfície Runnable és un altre
  mètode per construir fils.

 Presenta algunes variacions: Principalment, en el
  mètode main.

 Per incialitzar un objecte derivat d’una classe que
  implementa la interfície runnable hem de declarar
  que es crearà un nou fil i que aquest s’ha
  d’inicialitzar amb el mètode start().
CREACIÓ DEL FILS
              Thread vs. Runnable
  Si tots dos mètodes fan el mateix, quan haig
d’heretat de Thread i quan haig de implementar
                  Runnable?
Si la classe ha de ser derivada d’una altre classe (per exemple,
     la classe Applet), s’utilitza el mètode runnable. En cas
       contrari, senzillament, s’hereta de la classe Thread.
CREACIÓ DEL FILS
                  Thread vs. Runnable
    A Java no hi ha herència múltiple: O heretes de
 Thread o heretes d’Applet o de qualsevol altre classe.

    class rellotge extends Applet extends Thread { }

class rellotge extends Applet implements Runnable { }

• Puc heretar d’Applet
• Puc implementar la funcionalitat dels fils
CREACIÓ DEL FILS
  La interfície Runnable: Implementació
 Consisteix en declarar una classe que implementi
  Runnable i sobreescriure el mètode run()
        public abstract void run()
 Dins de run() incloem el codi a executar pel nou fil.
 A continuació, crearem un objecte de la classe Thread
  dins d’aquesta classe.
    Al constructor de Thread li passem com argument l’objecte de la nova
     classe (instància d’una classe que implementi Runnable):
        Thread(Runnable objecteFil, String nomFil)
 Per últim, cridem al métode start() amb l’objecte
  anterior.
        Synchronized void start()
CICLE DE VIDA D’UN FIL
Transició entre estats d’un thread

More Related Content

PDF
1213 Threads [3] Semafors
PDF
Religion 2bal
PDF
Programacio castella
ODT
Programacion Infantil 2015
DOC
Temporizacion Programacion Curso Sin Tiempos
PDF
Programación de aula lengua 4º
PDF
Ejemplo Plantilla ProgramacióN Clase
PPT
Programacion Aula
1213 Threads [3] Semafors
Religion 2bal
Programacio castella
Programacion Infantil 2015
Temporizacion Programacion Curso Sin Tiempos
Programación de aula lengua 4º
Ejemplo Plantilla ProgramacióN Clase
Programacion Aula

Viewers also liked (6)

PPTX
Programación Curricular de Aula
PDF
Programacion anual de ept 1156 jsbl- 2015 ccesa
PDF
Sesion de aprendizaje educacion para el trabajo
PDF
Planificación clase a clase
DOC
Formato de planificación docente
DOCX
Programación Curricular de Aula
Programacion anual de ept 1156 jsbl- 2015 ccesa
Sesion de aprendizaje educacion para el trabajo
Planificación clase a clase
Formato de planificación docente
Ad

Similar to 1213 Threads [2] Programació concurrent (20)

PDF
1213 Threads [4] Sincronització
PDF
Glossari-1.pdf
PDF
PDF
1213 Sockets [3] Programació
PDF
Introducción a la programación y la informática. Tema 9
DOCX
Guia d'estils jordi
PDF
Sync toasync
PDF
Proves de Software (en Java amb JUnit)
PDF
Orientació a objectes amb Moose
PPT
Uf3 sistemes operatius lliures
PPT
Uf3 sistemes operatius lliures
PDF
1213 Sockets [4] Servidors i fils
PDF
PDF
1213 Threads [1] Programació concurrent, processos i fils
ODP
Python
PDF
Sistemes operatius; apunts
PPTX
Programem la placa Arduino - Presentación para la asignatura de robótica
PPTX
UD3 Programació
PDF
C1 ud6
PPTX
Andorra Dot Net Event4 Assentant Bases
1213 Threads [4] Sincronització
Glossari-1.pdf
1213 Sockets [3] Programació
Introducción a la programación y la informática. Tema 9
Guia d'estils jordi
Sync toasync
Proves de Software (en Java amb JUnit)
Orientació a objectes amb Moose
Uf3 sistemes operatius lliures
Uf3 sistemes operatius lliures
1213 Sockets [4] Servidors i fils
1213 Threads [1] Programació concurrent, processos i fils
Python
Sistemes operatius; apunts
Programem la placa Arduino - Presentación para la asignatura de robótica
UD3 Programació
C1 ud6
Andorra Dot Net Event4 Assentant Bases
Ad

More from Oriol Torres (8)

PPT
Economia col·laborativa, turisme col·laboratiu i KangApp
PPTX
Presentation of Treat or Treat
PDF
Presentación pública Treat or Treat
PDF
1213 Threads [5] Accés a fitxers
PDF
1213 serveis [5] Correu electronic i pagines web
PDF
1213 Sockets [1] Introducció
PDF
1213 Sockets [2] Arquitectura client - servidor
PPTX
Appetite apps stats market
Economia col·laborativa, turisme col·laboratiu i KangApp
Presentation of Treat or Treat
Presentación pública Treat or Treat
1213 Threads [5] Accés a fitxers
1213 serveis [5] Correu electronic i pagines web
1213 Sockets [1] Introducció
1213 Sockets [2] Arquitectura client - servidor
Appetite apps stats market

1213 Threads [2] Programació concurrent

  • 1. PROGRAMACIÓ CONCURRENT Recursos per la concurrència
  • 2. PER QUÈ ÉS NECESSÀRIA LA PROGRAMACIÓ CONCURRENT? (1) Per la utilització completa del processador (2) Paral·lelisme entre la CPU i els dispositius d’E/S
  • 3. PER QUÈ ÉS NECESSÀRIA LA PROGRAMACIÓ CONCURRENT? (3) Per poder expressar el paral·lelisme potencial que existeix per fer que més d’un ordinador es pugui utilitzar per resoldre el problema. Per exemple, per trobar la sortida a un laberint.
  • 4. PER QUÈ ÉS NECESSÀRIA LA PROGRAMACIÓ CONCURRENT?
  • 6. PROGRAMES CONCURRENTS I PROCESSOS Un programa concurrent es concep com un CONJUNT DE THREADS o FILS DE CONTROL. Cada THREAD executa una única activitat seqüencial. Cada THREAD s’executa en el seu propi processador virtual executant independentment accions d’acord amb l’activitat que tingui associada . Els THREADs concurrents intercanvien entre ells missatges amb informació i missatges de sincronisme.
  • 7. ASPECTES DELS PROCESSOS Cada entorn de programació concurrent necessita establir algunes característiques sobre els seus processos:  Naturalesa dels processos.  Jerarquia dels processos.  Mecanismes de inicialització.  Mecanismes de finalització.  Formes de declaració.
  • 8. NATURALESA DELS PROCESSOS Els processos poden ser:  Estàtics: Són instanciats al començament del programa. El programador es declara explícitament.  Dinàmics: Són creats durant l’execució del programa, en funció de les dades. En funció dels processos que poden existir en un sistema es classifiquen com:  Sistema tancat: S’ha de tenir un coneixement en temps disseny (estàtic) sobre els processos que construeixen en el sistema i la seva activitat.  Sistema obert: El número de processos que constitueixen el sistema varia en el temps de forma que no es pot predir (fase de disseny), per exemple, perquè crea dinàmicament processos.
  • 9. JERARQUIA DELS PROCESSOS Els processos d’un programa es poden organitzar en:  Estructura plana: Tots els processos són equivalents. Evolucionen i finalitzen independentment (processos UNIX).  Estructura jerarquitzada: Entre els processos existeixen unes relaciones de dependència amb estructura d’arbre. Un procés no finalitza fins que els processos que en depenen no finalitzen.
  • 10. INCIALITZACIÓ DELS PROCESSOS Inicialitzar un procés és transferir-li, després de la seva creació, la informació que requereix per caracteritzar-lo individualment. Existeixen diferents categories:  A UNIX, cada procés és inicialment una rèplica del seu pare.  A JAVA, en la creació s’estableixen uns paràmetres de incialització.  Després de la creació, el fill comunica amb el seu pare i rep la informació de incialització.
  • 11. FINALITZACIÓ DELS PROCESSOS Existeixen múltiples formes de finalització d’un procés:  Quan la línia de flux de control assoleix el final (amb èxit).  Quan es produeix una excepció no atesa (amb fallida).  Quan un procés executa una sentència “self terminate” (amb fallida).  Quan el procés és avortat per un altre procés (amb fallida).  Quan es dóna una finalització coordinada “terminate” (amb èxit).  O bé, mai..
  • 12. DECLARACIÓ DE PROCESSOS CONCURRENTS Declaració per sentències estructurades cobegin procés_1, procés_2, .., procés_n coend Declaració com a components de bloc procedure Pare; process procés_1, begin .... end; process procés_2, begin .... end; begin ... End; Bifurcació (fork) ...... {if (fork()==0) { ... } // Solament s’executa en el procés fill else { ... } // S’executa solament en el procés pare } Invocació no estructurada
  • 14. ESTATS D’UN PROCÉS EN UN ENTORN MULTIPROCÉS Diagrama bàsic d’estats d’un procés en temps real
  • 15. CLASSES RELACIONADES AMB ELS FILS  El llenguatge de programació Java proporciona suport pels fils (un fil és un únic flux d’execució dins d’un procés) mitjançant una interfície i un conjunt de classes.  La interfície de Java i les classes que inclouen funcionalitat:  Threads  Runnable  Object Thread
  • 16. CLASSES RELACIONADES AMB ELS FILS Thread  És la classe responsable de produir fils funcionals per altres classes.  Per afegir la funcionalitat de fil a una classe, aquesta es deriva de Thread i s’ignora el mètode run.  La classe Thread també defineix els mètodes start i stop.
  • 17. CLASSES RELACIONADES AMB ELS FILS Runnable  Java no suporta l’herència múltiple de forma directa.  Aquesta interfície proporciona la capacitat d’afegir la funcionalitat d’un fil a una classe implementant la interfície.
  • 18. CLASSES RELACIONADES AMB ELS FILS Object  No es tracta d’una classe de suport als fils.  La classe Object proporciona mètodes com wait, notify i notifyAll.
  • 19. CREACIÓ DEL FILS  A Java, la creació de nous fils és molt més ràpida que la creació de nous processos.  A Java, en el procés de creació de fils, hi ha dos mecanismes que ens permetran portar-ho a terme:  Estenent la classe Thread.  Implementant la interfície Runnable. En ambdós casos, s’ha de definir un mètode run.
  • 20. CREACIÓ DEL FILS La classe Thread class classeConcurrent extends Thread { // .. Mètodes Aquesta és la tasca que serà // .. Atributs CONCURRENT public void run () { // .. Sentències // .. Sentències class ElMeuPrograma { public static void main (String [] args) { classeConcurrent tasca1, tasca2; tasca1=new classeConcurrent (); Declaració i creació tasca2=new classeConcurrent (); d’objectes (NORMAL) // .. Més sentències tasca1.start(); Iniciar tasca1 concurrentment tasca2.start(); // .. Més sentències amb main (). Invocar a tasca1.run() i tornar immediatament.
  • 21. CREACIÓ DEL FILS La classe Thread - Conclusions  Un objecte concurrent pertany a una classe que estén Thread.  S’ha de tornar a definir el mètode run () que especifica la tasca concurrent.  L’execució de la tasca concurrent es realitza mitjançant el mètode start () (heretat del Thread)
  • 22. CREACIÓ DEL FILS La classe Thread – Exemple: Fil class Fil extends Thread { La classe de la que els objectes public fil (String str) { han de ser concurrents super (str) // invoquem directament al constructor } public void run () { La tasca que serà concurrent for (int i = 0; i <10; i++) { System.out.println (i+” “+getName()); try { sleep ((long) (Math.random() *1000); Atura l’execució del fil } catch (InterruptedExecution e) {} (“dorm”) } System.out.println (“Fi “+getName ()); } }
  • 23. CREACIÓ DEL FILS La classe Thread – Exemple: Test public class VarisFils { Pas 1: Creo de la classe que llençarà els fils public static void main (String [] args) { fil u, dos; //s’intstancia el Thread u=new fil (“Hobitton”); Pas 2: Invoco a l’operador dos=new fil (“Mordor”); new per crear els fils //Inicia el que tingui el seu mètode run() u.start(); Pas 3: Invoco al mètode start () dos.start(); de cada fil. Aquest mètode System.out.println (“main no fa res”); arrenca el fil e invoca el mètode } run(). }
  • 24. CREACIÓ DEL FILS La interfície runnable  Implementar la interfície Runnable és un altre mètode per construir fils.  Presenta algunes variacions: Principalment, en el mètode main.  Per incialitzar un objecte derivat d’una classe que implementa la interfície runnable hem de declarar que es crearà un nou fil i que aquest s’ha d’inicialitzar amb el mètode start().
  • 25. CREACIÓ DEL FILS Thread vs. Runnable Si tots dos mètodes fan el mateix, quan haig d’heretat de Thread i quan haig de implementar Runnable? Si la classe ha de ser derivada d’una altre classe (per exemple, la classe Applet), s’utilitza el mètode runnable. En cas contrari, senzillament, s’hereta de la classe Thread.
  • 26. CREACIÓ DEL FILS Thread vs. Runnable A Java no hi ha herència múltiple: O heretes de Thread o heretes d’Applet o de qualsevol altre classe. class rellotge extends Applet extends Thread { } class rellotge extends Applet implements Runnable { } • Puc heretar d’Applet • Puc implementar la funcionalitat dels fils
  • 27. CREACIÓ DEL FILS La interfície Runnable: Implementació  Consisteix en declarar una classe que implementi Runnable i sobreescriure el mètode run() public abstract void run()  Dins de run() incloem el codi a executar pel nou fil.  A continuació, crearem un objecte de la classe Thread dins d’aquesta classe.  Al constructor de Thread li passem com argument l’objecte de la nova classe (instància d’una classe que implementi Runnable): Thread(Runnable objecteFil, String nomFil)  Per últim, cridem al métode start() amb l’objecte anterior. Synchronized void start()
  • 28. CICLE DE VIDA D’UN FIL Transició entre estats d’un thread