Tpsit Quinto Anno Riassunti: Multithreading, Socket, JSON e HTTP

Documento su Tpsit Quinto Anno Riassunti. Il Pdf, un riassunto di informatica per l'Università, copre multithreading, socket programming, JSON e HTTP, fornendo una panoramica chiara dei temi trattati.

Mostra di più

16 pagine

1.
2.
TPSIT 5° ANNO RIASSUNTI
CAPITOLO 1 - multi-thread
1.Cos'è un thread?
Un thread è un flusso di esecuzione indipendente che può essere gestito all'interno di un programma (processo).
Ogni thread esegue una serie di istruzioni, condivide la memoria e le risorse con altri thread dello stesso processo e
può funzionare in parallelo con altri thread. Ogni thread ha il proprio contesto di esecuzione, come i registri della
CPU e lo stato. Ogni programma in esecuzione ha almeno un thread principale, ma può creare più thread per
svolgere compiti in parallelo.
Processo vs Thread:
Un processo è un programma in esecuzione che ha la sua memoria e risorse.
Un thread è un'unità di esecuzione all'interno di un processo. I thread di uno stesso processo condividono
memoria e risorse.
Esempio pratico della vita reale:
un browser web: puoi caricare più schede (processi) e in ogni scheda ci sono azioni diverse in corso, come il
caricamento di pagine (thread).
Le classi che implementano thread devono definire un metodo run(), che serve a definire il comportamento che
un thread deve eseguire quando viene avviato.
1.1.Cos'è la programmazione multithread?
La programmazione multithread è una tecnica che permette a un programma di eseguire più thread in parallelo,
sfruttando al meglio le risorse del sistema. Questo approccio è utile per:
Migliorare la velocità e l'efficienza, sfruttando più core della CPU.
Gestire operazioni asincrone (ad esempio, mantenere un'interfaccia utente reattiva durante operazioni
lunghe).
Suddividere compiti complessi in unità più semplici e indipendenti.
Concetti fondamentali:
Stati di un thread:
NEW: Il thread è stato creato ma non avviato.
RUNNABLE: Pronto per essere eseguito.
WAITING e TIMED-WAITING: Il thread è sospeso in attesa di un segnale o per un periodo definito.
BLOCKED: In attesa di accedere a una risorsa.
TERMINATED: Il thread ha completato il suo compito.
Metodi principali per gestire i thread:
start(): Avvia l'esecuzione di un thread.
run(): Contiene le istruzioni eseguite dal thread.
join(): Attende che un thread termini l'esecuzione.
interrupt(): Segnala l'interruzione di un thread.
1.
2.
1.
1.2.Sincronizzazione tra thread
Quando i thread condividono risorse (come variabili o file), è necessario sincronizzarli per evitare conflitti, si
utilizzano tecniche di sincronizzazione:
Mutua esclusione: un meccanismo fondamentale nella programmazione multithread per garantire che solo
un thread alla volta possa accedere a una risorsa condivisa o eseguire una sezione critica del codice. Java
utilizza i monitor per implementare la mutua esclusione. Ogni oggetto in Java è associato a un monitor, che
può essere acquisito o rilasciato da un thread.
Attese e notifiche: per coordinare l'esecuzione tra più thread che lavorano su risorse condivise. Questi
metodi sono definiti nella classe Object e funzionano in combinazione con il monitor dell'oggetto.
Metodi fondamentali per la sincronizzazione:
synchronized (mutua esclusione):
Blocca l'accesso a una risorsa condivisa, permettendo a un solo thread alla volta di utilizzarla. Quando un
thread entra in un metodo o blocco sincronizzato, acquisisce il monitor dell'oggetto, impedendo ad altri
thread di accedervi fino al rilascio del monitor.
wait(), notify(), notifyAll() (della classe Object) (Attese e notifiche):
wait(): Sospende il thread corrente, mettendolo in attesa fino a quando un altro thread non invia un
segnale.
notify(): Risveglia un thread tra quelli in attesa.
notifyAll(): Risveglia tutti i thread in attesa sullo stesso oggetto monitor.
CAPITOLO 2 - Socket programming
1.Introduzione ai Socket
Un socket è un'interfaccia software che consente la comunicazione tra due programmi, che possono essere in
esecuzione sullo stesso dispositivo o su dispositivi remoti connessi in rete. È un punto di connessione che permette
lo scambio di dati attraverso un protocollo di rete, come TCP (Transmission Control Protocol) o UDP (User Datagram
Protocol).
I socket sono utilizzati per la comunicazione tra processi su reti LAN/WAN. Permettono di implementare protocolli
come UDP e TCP per trasmettere dati tra client e server.
Elementi di un Socket
Un socket è identificato da:
Indirizzo IP: Specifica il dispositivo nella rete.
Numero di Porta: Indica l'applicazione specifica sul dispositivo.
Ad esempio, una connessione socket è rappresentata dalla coppia <IP, Porta>:
127.0.0.1:8080: Comunicazione locale sulla porta 8080.
Esempio di Scambio di Dati
Socket Server:
Aspetta che un client si connetta.

Visualizza gratis il Pdf completo

Registrati per accedere all’intero documento e trasformarlo con l’AI.

Anteprima

TPSIT 5º ANNO RIASSUNTI

CAPITOLO 1 - multi-thread

Cos'è un thread?

Un thread è un flusso di esecuzione indipendente che può essere gestito all'interno di un programma (processo). Ogni thread esegue una serie di istruzioni, condivide la memoria e le risorse con altri thread dello stesso processo e può funzionare in parallelo con altri thread. Ogni thread ha il proprio contesto di esecuzione, come i registri della CPU e lo stato. Ogni programma in esecuzione ha almeno un thread principale, ma può creare più thread per svolgere compiti in parallelo.

Processo vs Thread: · Un processo è un programma in esecuzione che ha la sua memoria e risorse. · Un thread è un'unità di esecuzione all'interno di un processo. I thread di uno stesso processo condividono memoria e risorse.

Esempio pratico della vita reale: · un browser web: puoi caricare più schede (processi) e in ogni scheda ci sono azioni diverse in corso, come il caricamento di pagine (thread).

Le classi che implementano thread devono definire un metodo run(), che serve a definire il comportamento che un thread deve eseguire quando viene avviato.

Cos'è la programmazione multithread?

La programmazione multithread è una tecnica che permette a un programma di eseguire più thread in parallelo, sfruttando al meglio le risorse del sistema. Questo approccio è utile per: · Migliorare la velocità e l'efficienza, sfruttando più core della CPU. · Gestire operazioni asincrone (ad esempio, mantenere un'interfaccia utente reattiva durante operazioni lunghe). · Suddividere compiti complessi in unità più semplici e indipendenti.

Concetti fondamentali:

  1. Stati di un thread:
    • NEW: Il thread è stato creato ma non avviato.
    • RUNNABLE: Pronto per essere eseguito.
    • WAITING e TIMED-WAITING: Il thread è sospeso in attesa di un segnale o per un periodo definito.
    • BLOCKED: In attesa di accedere a una risorsa.
    • TERMINATED: Il thread ha completato il suo compito.
  2. Metodi principali per gestire i thread:
    • start(): Avvia l'esecuzione di un thread.
    • run(): Contiene le istruzioni eseguite dal thread.
    • join(): Attende che un thread termini l'esecuzione.
    • interrupt(): Segnala l'interruzione di un thread.

Sincronizzazione tra thread

Quando i thread condividono risorse (come variabili o file), è necessario sincronizzarli per evitare conflitti, si utilizzano tecniche di sincronizzazione: · Mutua esclusione: un meccanismo fondamentale nella programmazione multithread per garantire che solo un thread alla volta possa accedere a una risorsa condivisa o eseguire una sezione critica del codice. Java utilizza i monitor per implementare la mutua esclusione. Ogni oggetto in Java è associato a un monitor, che può essere acquisito o rilasciato da un thread. · Attese e notifiche: per coordinare l'esecuzione tra più thread che lavorano su risorse condivise. Questi metodi sono definiti nella classe Object e funzionano in combinazione con il monitor dell'oggetto.

Metodi fondamentali per la sincronizzazione:

  1. synchronized (mutua esclusione):
    • Blocca l'accesso a una risorsa condivisa, permettendo a un solo thread alla volta di utilizzarla. Quando un thread entra in un metodo o blocco sincronizzato, acquisisce il monitor dell'oggetto, impedendo ad altri thread di accedervi fino al rilascio del monitor.
  2. wait(), notify(), notifyAll() (della classe Object) (Attese e notifiche):
    • wait(): Sospende il thread corrente, mettendolo in attesa fino a quando un altro thread non invia un segnale.
    • notify(): Risveglia un thread tra quelli in attesa.
    • notifyAll(): Risveglia tutti i thread in attesa sullo stesso oggetto monitor.

CAPITOLO 2 - Socket programming

Introduzione ai Socket

Un socket è un'interfaccia software che consente la comunicazione tra due programmi, che possono essere in esecuzione sullo stesso dispositivo o su dispositivi remoti connessi in rete. È un punto di connessione che permette lo scambio di dati attraverso un protocollo di rete, come TCP (Transmission Control Protocol) o UDP (User Datagram Protocol).

I socket sono utilizzati per la comunicazione tra processi su reti LAN/WAN. Permettono di implementare protocolli come UDP e TCP per trasmettere dati tra client e server.

Elementi di un Socket Un socket è identificato da: · Indirizzo IP: Specifica il dispositivo nella rete. · Numero di Porta: Indica l'applicazione specifica sul dispositivo. Ad esempio, una connessione socket è rappresentata dalla coppia <IP, Porta>: · 127.0.0.1:8080: Comunicazione locale sulla porta 8080.

Esempio di Scambio di Dati

  1. Socket Server:
    • Aspetta che un client si connetta.
    • Riceve i dati dal client e invia una risposta.
  2. Socket Client:
    • Si connette al server.
    • Invia dati e attende la risposta.

La gestione dei socket avviene tramite il package java.net, che offre classi fondamentali come: 0 InetAddress: rappresenta indirizzi IP. 0 Socket e ServerSocket: utilizzati per le comunicazioni TCP. 0 DatagramSocket e DatagramPacket: utilizzati per le comunicazioni UDP. O URL: rappresenta risorse web.

Livelli OSI Coinvolti con i Socket

  1. Livello 3 (Network):
    • È responsabile della gestione degli indirizzi IP e dell'instradamento dei pacchetti.
    • I socket utilizzano il protocollo IP per identificare i dispositivi sulla rete (indirizzi IP).
    • Questo livello garantisce che i pacchetti raggiungano la destinazione.
  2. Livello 4 (Transport):
    • È responsabile della gestione della comunicazione tra applicazioni tramite protocolli come UDP o TCP.
    • Nel caso di UDP:
      • Non c'è connessione persistente (è senza connessione, connectionless).
      • Non garantisce affidabilità o ordine dei pacchetti.
      • Fornisce numeri di porta per identificare i processi di destinazione.
  3. Livello 5 e superiore (Sessione, Presentazione, Applicazione):
    • Anche se il socket è più direttamente legato ai livelli 3 e 4, le applicazioni lo utilizzano per implementare funzionalità a livelli superiori.
    • Ad esempio:
      • Livello 5 (Sessione): Gestisce la sincronizzazione e il controllo del dialogo tra applicazioni.
      • Livello 7 (Applicazione): Qui le applicazioni (ad esempio giochi o streaming) inviano dati tramite socket.

Comunicazione UDP

· UDP (User Datagram Protocol): protocollo senza connessione*, in cui i dati sono inviati in pacchetti chiamati datagram. Non garantisce l'ordine né la consegna dei pacchetti. O *Senza Connessione O Questo modello, utilizzato dal protocollo UDP (User Datagram Protocol), non richiede che i dispositivi stabiliscano una connessione prima di inviare dati. O Esempio pratico: O Trasmissione di audio/video in tempo reale. o Servizi di DNS (Domain Name System). o Trasferimento rapido di dati senza necessità di conferme. · Classi Java principali per UDP: DatagramSocket: per inviare e ricevere datagram. o DatagramPacket: rappresenta i dati trasmessi o ricevuti. · Esempio: O Il server riceve un datagram tramite receive(), elabora i dati e risponde con un altro datagram usando send().

Comunicazione TCP

· TCP (Transmission Control Protocol): protocollo orientato alla connessione*, garantisce l'integrità e l'ordine dei dati. 0 *Orientato alla Connessione O Questo modello, utilizzato dal protocollo TCP (Transmission Control Protocol), implica che i dispositivi coinvolti stabiliscano una connessione stabile e affidabile prima di iniziare a scambiare dati. O Esempio pratico: O Navigazione web con HTTP/HTTPS. O Email con SMTP o IMAP. 0 Streaming video su protocolli affidabili. · Classi Java principali per TCP: O ServerSocket: attende connessioni dai client tramite accept(). o Socket: rappresenta la connessione tra client e server. · Concetti importanti: O Server TCP Iterativi: gestiscono una connessione alla volta, rispondendo e chiudendo immediatamente. O Server TCP Concorrenti: gestiscono più connessioni contemporaneamente utilizzando thread o un thread-pool.

Server TCP Concorrenti

Definizione Un server TCP concorrente è progettato per gestire più richieste contemporaneamente. Ogni connessione client viene gestita da un thread o un processo separato, consentendo al server di accettare e servire richieste simultaneamente.

Caratteristiche

  1. Gestione parallela delle connessioni:
    • Ogni client viene servito da un thread o un processo indipendente.
    • Può gestire più richieste contemporaneamente senza bloccare l'accettazione di nuove connessioni.
  2. Scalabilità:
    • Ideale per applicazioni con un alto volume di traffico.
  3. Complessità maggiore:
    • Le prestazioni possono essere limitate solo dalle risorse hardware disponibili (es. CPU e memoria).
    • Richiede l'uso di meccanismi di sincronizzazione (es. mutex o semafori) per evitare conflitti di accesso a risorse condivise.

Flusso operativo

  1. Il server si avvia e si mette in ascolto su una porta TCP.
  2. Accetta una connessione client.
  3. Avvia un thread (o processo) separato per gestire il client.
  4. Torna immediatamente in ascolto per nuove connessioni.
  5. Ogni thread/processo gestisce il proprio client in modo indipendente.

Server TCP Iterativi

Definizione Un server TCP iterativo è un tipo di server che gestisce una sola richiesta alla volta. Ogni connessione client viene accettata, gestita completamente, e chiusa prima che il server possa accettare un'altra richiesta.

Caratteristiche

  1. Gestione sequenziale delle connessioni:
    • Il server accetta una richiesta e blocca l'accettazione di altre finché non ha completato l'elaborazione della richiesta attuale.
    • Non supporta più client contemporaneamente.
  2. Semplicità:
    • È più facile da implementare poiché non richiede la gestione della concorrenza.
    • Ideale per applicazioni con basso traffico.
  3. Prestazioni limitate:
    • Non scala bene quando ci sono molte richieste contemporanee, perché il server deve elaborarle una per una.

Flusso operativo

  1. Il server si avvia e si mette in ascolto su una porta TCP.
  2. Accetta la connessione del primo client.
  3. Gestisce la richiesta (es. invio/lettura di dati).
  4. Chiude la connessione e torna in ascolto per un nuovo client.

Esempi di utilizzo · Server Iterativo: o Applicazioni con un numero limitato di utenti simultanei, come un piccolo server di test. · Server Concorrente: o Applicazioni ad alta richiesta, come server web, chat room o piattaforme di streaming.

Gestione di Protocollo Applicativo

· Protocolli Applicativi: definiscono regole specifiche per la comunicazione tra client e server. Ad esempio: o Un server può implementare un servizio calcolatrice che esegue operazioni come ADD, SUB, MUL, DIV, rispondendo con i risultati. O La comunicazione avviene tramite stringhe che terminano con i caratteri CR e LF.

CAPITOLO 3 - Gestione dei documenti in formato XML

Introduzione a XML

Cos'è XML? È un linguaggio markup progettato per descrivere dati strutturati in modo leggibile da esseri umani e macchine. Diversamente da HTML, XML non ha tag predefiniti, permettendo agli sviluppatori di creare tag personalizzati per descrivere i dati in modo preciso.

Non hai trovato quello che cercavi?

Esplora altri argomenti nella Algor library o crea direttamente i tuoi materiali con l’AI.