Qualunque sia la tecnologia di virtualizzazione che sto usando
Ricordate i giorni in cui i sistemi con più di 512 MB di RAM erano considerati all'avanguardia? Trascorro le mie giornate scrivendo il codice per il priore.
Lavoro principalmente su programmi di basso livello eseguiti sul dominio privilegiato in un ambiente Xen. Il nostro massimale per il dominio privilegiato è di 512 MB, lasciando libero il resto della RAM ai nostri clienti. È anche tipico per noi limitare il dominio privilegiato a un solo core della CPU.
Quindi eccomi qui, scrivendo il codice che verrà eseguito su un nuovissimo server $ 6k, e ogni programma deve funzionare (idealmente) entro un massimale assegnato a 100kb, o evitare completamente l'allocazione dinamica della memoria.
Concisamente, ottimizzo per:
- Impronta di memoria
- Sorts (dove la maggior parte del mio codice passa la maggior parte del suo tempo)
Devo anche essere estremamente diligente quando si tratta di trascorrere del tempo in attesa di serrature, in attesa di I / O o semplicemente in attesa in generale. Una parte considerevole del mio tempo è dedicata al miglioramento delle librerie di socket non bloccanti esistenti e alla ricerca di metodi più pratici per programmare senza blocchi.
Ogni giorno trovo un po 'ironico che sto scrivendo codice proprio come ho fatto 15 anni fa, su sistemi che sono stati acquistati il mese scorso, a causa di avanzamenti nella tecnologia.
Questo è tipico per chiunque lavori anche su piattaforme embedded, sebbene anche molte di queste abbiano almeno 1 GB a disposizione. Come sottolinea Jason, è anche tipico quando si scrivono programmi da eseguire su dispositivi mobili. L'elenco continua, Chioschi, thin client, cornici, ecc.
Sto iniziando a pensare che le restrizioni hardware separino davvero i programmatori da persone che possono far funzionare qualcosa senza preoccuparsi di ciò che effettivamente consuma. Mi preoccupo (in basso vota se è necessario) quali sono le lingue che tipo e memoria completamente astratte controllano il pool di buonsenso che (usato per essere) condiviso tra i programmatori di varie discipline.