Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Processos i fils

Com fer que un programa avanci diverses tasques alhora sense corrompre les dades ni quedar-se encallat. És la base del bloc següent: un servidor ha d’atendre molts clients a la vegada, i dos processos que es comuniquen per la xarxa s’envien missatges (Sòcols i serveis).

Com llegir aquests documents

Els documents van del concepte general a la implementació concreta:

  1. Conceptes. Què és la concurrència, en què es diferencia del paral·lelisme, què són processos i fils, i quins dos grans models hi ha per organitzar-la: estat compartit o pas de missatges.
  2. El problema de compartir. Quan diversos fils toquen les mateixes dades apareixen tres reptes, independents del llenguatge: l’accés segur, la coordinació i la vitalitat (que el sistema no quedi bloquejat).
  3. La solució a Java. Java fa servir el model d’estat compartit. Primer, com es creen i s’executen els fils. Després, les tècniques per no haver de sincronitzar, per ordre de preferència, abans de les eines de sincronització de baix nivell. La llibreria java.util.concurrent va al final perquè encapsula tot l’anterior, i és el que faràs servir a la pràctica.
  4. L’alternativa. El pas de missatges evita compartir dades: els fils o els processos es comuniquen enviant-se missatges. És el pont cap a la comunicació per xarxa.
flowchart TD
    C["Concurrència"] --> E["Estat compartit"]
    C --> M["Pas de missatges"]
    E --> J["Java"]
    J --> F["Fils"]
    F --> T["Tècniques de disseny"]
    F --> O["Join, interrupt i volatile"]
    T --> S["Sincronització"]
    O --> S
    S --> L["Llibreria Java concurrent"]

Fonaments

  • Concurrència: concurrència i paral·lelisme, processos i fils, i els models de concurrència
  • Estat compartit: el model on tots els fils comparteixen dades, amb els reptes d’accés segur, coordinació i vitalitat

Concurrència a Java

  • Java: com implementa Java la concurrència, amb la JVM, la memòria i els fils
    • Fils: estats d’un fil, com crear-lo i executar-lo, i fils de plataforma i virtuals
    • Tècniques de disseny: les quatre tècniques per evitar problemes amb memòria compartida, per ordre de preferència
    • Join, interrupt i volatile: esperar la fi d’un fil, aturar-lo des de fora i la visibilitat de l’estat compartit
    • Sincronització: monitors, wait i notify, i ReentrantLock
    • Llibreria Java concurrent: java.util.concurrent, amb executors, tasques amb resultat, cues, sincronitzadors i col·leccions concurrents

Sense estat compartit

  • Pas de missatges: models síncron i asíncron, cues, gestió de peticions i sistemes reactius

Després

Sòcols i serveis porta el pas de missatges entre processos a la xarxa. Un servidor amb sòcols és, sobretot, un problema de concurrència: atendre diversos clients sense que s’esperin entre ells.

Itinerari curt

Si no pots llegir-ho tot, aquests cinc documents en ordre donen una base suficient per escriure codi concurrent correcte a Java:

Concurrència → Estat compartit → Fils → Tècniques de disseny → Llibreria Java concurrent

Referències

Programació i sistemes reactius:

Last change: , commit: 1b2bff7