Differenze chiave tra concomitanza e parallelismo

Commenti: 0

Concorrenza e parallelismo sono concetti comunemente incontrati, soprattutto in ambito informatico. Nel parsing dei dati, aiutano, tra l'altro, a massimizzare le prestazioni e l'efficacia del sistema. Sebbene questi termini siano spesso utilizzati in contesti sinonimi, si riferiscono contemporaneamente a metodi diversi per elaborare in modo efficiente grandi volumi di dati. Pertanto, entrambi i termini sono ugualmente rilevanti ai fini della costruzione di sistemi scalabili per la raccolta e l'analisi dei dati. In questo articolo consideriamo la concorrenza e il parallelismo, le loro differenze e gli esempi del loro utilizzo nel parsing dei dati.

Che cos'è la concorrenza?

Nel parsing, la concomitanza si riferisce all'esecuzione di più compiti in modo sovrapposto all'interno di un intervallo di tempo di un singolo processore. Ciò significa che, sebbene sia possibile eseguire un solo task alla volta, ai sistemi esterni sembra che molti task vengano eseguiti simultaneamente. In altre parole, l'esecuzione di ogni compito compete per le risorse del processore, ma non è in grado di utilizzarle tutte allo stesso tempo.

In particolare, la strategia funziona meglio nella concomitanza I/O bound, che comprende qualsiasi tipo di operazione in cui il programma invia o riceve dati da un altro dispositivo. Una di queste operazioni è lo scraping del web. La concomitanza consente a uno scraper di inviare più richieste contemporaneamente, anziché aspettare che una venga soddisfatta prima di inviare la successiva. In questo caso, la produttività aumenta perché il tempo necessario per completare le richieste diminuisce.

È importante notare che a volte la concomitanza può essere definita come il cosiddetto "parallelismo difettoso", ma nei blocchi seguenti lo supereremo.

Comprendere le Threads

I thread sono gli elementi principali dei sistemi di raccolta dati in esecuzione concorrente. Per comprendere appieno il funzionamento dei thread, è necessario esaminare da vicino la definizione di processo. Un processo funzionante contiene una serie di attività, ognuna delle quali è svolta da un singolo thread. Un thread può quindi essere considerato come la più piccola unità indivisibile del lavoro di un computer.

Dal punto di vista della concorrenza, molti thread possono essere eseguiti più o meno contemporaneamente. Ciò consente al sistema di sfruttare al meglio le risorse disponibili dei processori.

I moderni linguaggi di programmazione e i sistemi operativi consentono di gestire i thread: crearli, sospenderli e sincronizzarli. I thread sono particolarmente apprezzati nelle operazioni di parsing dei dati, perché consentono di gestire più flussi di dati contemporaneamente, riducendo i tempi di attesa e aumentando l'efficienza.

Esempio pratico

In termini pratici, la concorrenza è una componente di quasi tutti i sistemi software contemporanei. Questa caratteristica consente di eseguire un gran numero di processi con risorse ridotte. Un esempio da manuale di concurrency è il servizio di più richieste contemporaneamente sul server web.

Per esemplificare, ipotizziamo un mercato online in cui un utente può effettuare ordini, cercare prodotti e controllare lo stato dei suoi ordini tutti insieme. Il server non può letteralmente gestire tutte le richieste contemporaneamente a causa del numero limitato di processori. Tuttavia, è in grado di eseguire la concurrency, che gli consente di condividere il tempo con le attività passando da una richiesta all'altra. Ad esempio, un utente può effettuare un ordine e un altro può richiedere informazioni sui prodotti. Il server può eseguire questi due processi in modo ciclico, invece di aspettare che il primo finisca prima di iniziare il secondo. In questo modo, la reattività del sistema è notevolmente migliorata e il sistema sembra eseguire i compiti in parallelo.

Un esempio diverso rispetto al web scraping è quello di un utente che vuole raccogliere dati da 100 pagine web. Senza concurrency, il download segue un ciclo di attesa-richiesta-processo che richiede un tempo inutilmente lungo. Con la concurrency, invece, l'utente potrebbe inviare, ad esempio, 10 richieste contemporaneamente e poi, mentre le prime pagine vengono caricate, elaborare i dati già ricevuti. Rispetto all'attesa del caricamento di ogni singola pagina, si risparmia molto più tempo.

Sfruttare la concorrenza per ottimizzare i processi

Nel parsing del web, l'impiego della concorrenza può aumentare l'efficienza. Ad esempio, un web scraper può utilizzare la concurrency per recuperare dati da diverse pagine web contemporaneamente, riducendo così il tempo totale necessario per raccogliere le informazioni. Di seguito sono riportati alcuni punti su come la concorrenza aiuta a ridurre i tempi dei processi:

  • permette una maggiore reattività, in modo che anche quando sono in esecuzione altri processi lunghi, il sistema possa rispondere immediatamente alle richieste degli utenti;
  • consente di utilizzare appieno le risorse del processore per eseguire alcuni compiti in attesa che altri vengano completati;
  • consente l'esecuzione di più processi contemporaneamente, riducendo così il tempo necessario per l'esecuzione di tutte le attività secondarie.

Inoltre, la concorrenza viene applicata per l'elaborazione delle informazioni in modo da non bloccare il thread di esecuzione principale, in modo da poter utilizzare il computer senza alcun calo delle prestazioni.

Che cos'è il parallelismo?

La definizione breve di parallelismo si riferisce all'esecuzione simultanea di un insieme specifico di processi computazionali su risorse computazionali diverse. Nel parallelismo, le risorse vengono utilizzate contemporaneamente, a differenza della concorrenza, dove le risorse vengono semplicemente alternate e si verifica una simulazione di esecuzione simultanea. Per dirla in altro modo, il parallelismo è l'elaborazione simultanea di dati su più core di CPU o anche su più server.

Andiamo oltre e consideriamo: perché usare il parallelismo. I vantaggi sono i seguenti:

  • esecuzione più rapida di attività che richiedono risorse, come l'apprendimento automatico, il rendering grafico o l'analisi dei big data;
  • bilanciamento efficace del carico di lavoro nei sistemi multicore, poiché il carico è condiviso tra i core del processore;
  • elaborazione in tempo reale di flussi di dati, fondamentale in settori come l'elaborazione video o l'analisi finanziaria.

I moderni processori multi-core consentono di suddividere i compiti per un'esecuzione parallela indipendente e simultanea.

Accelerazione dei processi con il parallelismo

L'esecuzione parallela dei compiti riduce il tempo di calcolo e comporta la suddivisione di un calcolo in parti. I processi del sistema possono essere eseguiti in modo non sincrono, poiché il carico di lavoro viene suddiviso tra diversi processori e core.

Nel parallelismo moderno un esempio può essere osservato nell'elaborazione delle immagini. Supponiamo di dover applicare un filtro specifico a un'immagine ad alta risoluzione. Se dovessimo elaborare ogni pixel uno per uno, ci vorrebbe una quantità di tempo irragionevole. Tuttavia, con l'uso del parallelismo, l'immagine può essere suddivisa in più parti e ogni processore esegue la sua parte contemporaneamente. Ciò consente di aumentare al massimo la velocità dell'applicazione e di migliorarne le prestazioni. È noto che questo approccio viene utilizzato nell'elaborazione delle informazioni dell'intelligenza artificiale e nei videogiochi.

Concorrenza e parallelismo: Differenze chiave

Durante lo sviluppo di sistemi software, è necessario apprendere le tempistiche specifiche dell'uso della concorrenza rispetto al parallelismo e comprendere la relazione tra queste tecniche e le prestazioni. Ecco i due punti più importanti da comprendere:

  • L'obiettivo principale della concurrency è quello di passare da un task all'altro in modo ottimale, in modo che vengano effettivamente eseguiti contemporaneamente, ma non realmente in parallelo.
  • Il parallelismo offre una vera esecuzione simultanea su più processori o core ed è più utile nei processi ad alta intensità di calcolo.

Di seguito è riportata una tabella che illustra visivamente i punti di differenza tra parallelismo e concorrenza:

Criterio Parallelismo Concorrenza
Esecuzione del compito Simultaneo Alternanza
Gestione delle risorse Processori/cores multipli Un processore
Prestazioni Accelera l'esecuzione Migliora la reattività
Tipo di compito Ad alta intensità di calcolo I/O operazioni

In sintesi, ogni approccio ha i suoi vantaggi e richiede una selezione basata sulle esigenze specifiche del sistema. In presenza di una potenza di calcolo limitata, la concorrenza aiuta a fare un uso efficiente delle risorse, mentre il parallelismo aiuta a velocizzare le operazioni segmentando il carico su vari processori.

Combinazione di concorrenza e parallelismo

Anche se la concorrenza e il parallelismo possono essere studiati come fenomeni separati, la loro fusione è spesso straordinariamente produttiva. Nei sistemi con applicazioni complesse che richiedono un'elevata reattività, la loro combinazione è molto importante perché migliora notevolmente l'efficienza complessiva. Un approccio combinato consente un uso ottimale delle risorse informatiche e accelera l'elaborazione dei dati.

Un esempio di questo tipo di approccio è l'elaborazione di un grande insieme di dati. In questo caso il parallelismo si occupa di suddividere i compiti su più processori, mentre la concorrenza controlla i processi su ciascun processore.

I vantaggi della combinazione di questi metodi includono, ma non si limitano a:

  • Massimizzazione dell'uso delle risorse di calcolo: ogni processore e core è attivo e lavora a pieno regime;
  • Maggiore velocità di elaborazione: le attività possono essere eseguite simultaneamente e il task-shifting può accelerare notevolmente l'esecuzione dei processi;
  • Supporto per scenari complessi: i processi a più livelli che comportano un alto grado di complessità multi-tasking possono essere gestiti in modo efficiente attraverso il metodo combinato.

La combinazione di queste tecniche permette di progettare sistemi molto potenti e scalabili nel campo dell'elaborazione di grandi informazioni e di compiti di calcolo pesanti.

L'approccio migliore per lo scraping del Web

Quando si estraggono informazioni da siti web, sono le attività dell'utente a determinare se preferisce la concomitanza o il parallelismo o, addirittura, nessuna delle due cose. In realtà, un approccio concorrente è pratico solo quando c'è un tempo di inattività prolungato nell'emissione delle richieste, o quando il web scraping non è molto intensivo per la CPU. L'opposto è vero per il parallelismo, che è utile in situazioni in cui c'è un alto grado di elaborazione post-visita del contenuto della pagina, o c'è un sovraccarico significativo del processore a causa del parsing.

È possibile perseguire una combinazione di strategie, che in modo ottimale consiste nell'implementare la concorrenza nell'invio di richieste asincrone e il parallelismo nella loro elaborazione. Quest'ultimo ha un vantaggio principale: è possibile visitare le pagine in modo esaustivo ed elaborare le informazioni con un'intensità altrettanto elevata.

Concorrenza e parallelismo: Conclusione

Questo articolo ha analizzato in dettaglio la concorrenza e il parallelismo, descrivendo come ciascuno di essi può operare in circostanze e situazioni diverse. La concorrenza si riferisce a un insieme di tecniche per gestire l'esecuzione di attività passando da una all'altra per massimizzare l'efficienza dell'uso del tempo disponibile del processore. Parallelismo significa fare più cose contemporaneamente, ad esempio utilizzando più processori o più core di un singolo processore. La principale caratteristica distintiva di queste strategie deriva dal fatto che nella concurrency alcune risorse sono inattive mentre vengono spese, mentre il parallelismo ottimizza le risorse disponibili ridistribuendole.

A nostro avviso, la scelta dell'approccio migliore dipende dalle peculiarità del problema: la concurrency è preferibile per compiti asincroni, mentre il parallelismo è più adatto per calcoli complessi. In alcune situazioni, la combinazione di questi due approcci offre il risultato migliore.

Commenti:

0 Commenti