Qualunque sia la tecnologia di virtualizzazione che sto usando
Ricordi i giorni in cui i sistemi con più di 512 MB di RAM erano considerati bleeding edge? Passo i miei giorni a scrivere il codice per il precedente.
Lavoro principalmente su programmi di basso livello che girano sul dominio privilegiato in un ambiente Xen. Il nostro limite per il dominio privilegiato è di 512 MB, lasciando il resto della RAM libero per i nostri clienti. È anche tipico per noi limitare il dominio privilegiato a un solo core della CPU.
Quindi eccomi qui, a scrivere codice che verrà eseguito su un nuovissimo server da $ 6k, e ogni programma deve funzionare (idealmente) entro un limite allocato di 100kb, o evitare completamente l'allocazione dinamica della memoria.
In breve, ottimizzo per:
- Impronta di memoria
- Sorta (dove la maggior parte del mio codice passa la maggior parte del tempo)
Devo anche essere estremamente diligente quando si tratta di tempo trascorso in attesa di blocchi, in attesa di I / O o semplicemente in attesa in generale. Una parte considerevole del mio tempo va nel miglioramento delle librerie socket esistenti non bloccanti e nella ricerca di metodi più pratici di programmazione senza blocchi.
Ogni giorno trovo un po 'ironico il fatto che scrivo codice proprio come ho fatto 15 anni fa, su sistemi acquistati il mese scorso, a causa dei progressi della tecnologia.
Questo è tipico per chiunque lavori anche su piattaforme embedded, anche se molti di questi hanno almeno 1 GB a disposizione. Come sottolinea Jason, è anche tipico quando si scrivono programmi da eseguire su dispositivi mobili. L'elenco potrebbe continuare, chioschi, thin client, cornici, ecc.
Sto iniziando a pensare che le restrizioni hardware separino davvero i programmatori dalle persone che possono far funzionare qualcosa senza preoccuparsi di ciò che effettivamente consuma. Mi preoccupo (votatemi verso il basso, se necessario), quali linguaggi quel tipo completamente astratto e la memoria controllano il pool collettivo di buon senso che (era solito) condiviso tra i programmatori di varie discipline.