Appendice A. Suggerimenti per gli sviluppatori


Ogni buon manuale di progammazione affronta i problemi relativi all'assegnazione della memoria e alle prestazioni di determinate funzioni. Durante lo sviluppo del software tenere in considerazione le problematiche in grado di aumentare il consumo energetico sui sistemi sui quali viene eseguito il software. Anche se tali considerazioni non interessano tutto il codice, sarà possibile ottimizzare il codice stesso migliorando le aree che spesso possono limitare le prestazioni.
Alcune tecniche spesso problematiche includono:
  • utilizzo dei thread.
  • i wake-up della CPU non necessari e l'uso non efficiente dei processi di attivazione. Se necessario eseguire un processo di attivazione (race to idle), eseguire l'intero processo ed il più velocemente possibile.
  • utilizzo non necessario di [f]sync().
  • interrogazioni attive non necessarie o brevi timeout regolari. (Reazione agli eventi).
  • utilizzo non efficiente dei processi di attivazione 'wake-up'.
  • accesso inefficiente del disco. Utilizzo di buffer molto grandi per evitare un accesso del disco frequente. Scrivere un blocco molto grande per volta.
  • utilizzo inefficiente dei timer. Se possibile raggruppare i timer attraverso le applicazioni (oppure attraverso i sistemi).
  • I/O eccessivo, consumo energetico, o utilizzo della memoria (incluso perdite di memoria)
  • esecuzione di computazione non necessaria.
Le seguenti sezioni esaminano alcune delle suddette aree in maggior dettaglio.

A.1. Utilizzo dei thread

È comune pensare che l'utilizzo dei thread migliora le prestazioni e la velocità delle applicazioni, ma tali miglioramenti non si verificano in tutti i casi.
Python

Python utilizza il Global Lock Interpreter[1], per questo motivo il threading sarà utile solo per operazioni I/O significative. Unladen-swallow [2] è una implementazione più veloce di Python attraverso la quale sarà possibile ottimizzare il vostro codice.

Perl

I thread di Perl sono stati originariamente creati per applicazioni in esecuzione senza il forking (come ad esempio i sistemi operativi Windows a 32-bit). Nei thread di Perl i dati vengono copiati per ogni thread (Copy On Write). Per impostazione predefinita i dati non vengono condivisi poichè gli utenti dovrebbero essere in grado di definire il livello di dati da condividere. Per tale processo il modulo threads::shared deve essere incluso. Tuttavia il modulo non copierà solo i dati (Copy On Write), ma creerà anche delle variabili utilizzando una quantità maggiore di tempo rendendolo più lento. [3]

C

I thread C condividono la stessa memoria, ogni thread ha un proprio stack ed il kernel non deve creare nuovi descrittori per il file ed assegnare nuovo spazio di memoria. C può utilizzare il supporto di un numero maggiore di CPU per più thread. Per questo motivo e per massimizzare le prestazioni, usare un linguaggio low-level come ad esempio C o C++. Se si utilizzo un linguaggio di programmazione considerate la scrittura di un C binding. Utilizzare un profiler per identificare le sezioni con una prestazione scadente del codice. [4]

Red Hat logoGithubRedditYoutubeTwitter

Formazione

Prova, acquista e vendi

Community

Informazioni sulla documentazione di Red Hat

Aiutiamo gli utenti Red Hat a innovarsi e raggiungere i propri obiettivi con i nostri prodotti e servizi grazie a contenuti di cui possono fidarsi.

Rendiamo l’open source più inclusivo

Red Hat si impegna a sostituire il linguaggio problematico nel codice, nella documentazione e nelle proprietà web. Per maggiori dettagli, visita ilBlog di Red Hat.

Informazioni su Red Hat

Forniamo soluzioni consolidate che rendono più semplice per le aziende lavorare su piattaforme e ambienti diversi, dal datacenter centrale all'edge della rete.

© 2024 Red Hat, Inc.