Attualmente sto leggendo un libro, un capitolo sull'I / O e mi è venuta in mente una domanda.
Fondamentalmente, quando si programma in C / C ++, si ha una straordinaria opportunità di ottimizzare il comportamento dell'hardware. Usando il buffering per i dispositivi a blocchi, usa streaming e I / O asincrono per dispositivi di rete ad alta latenza e così via.
E se stai scrivendo un'applicazione server destinata a applicazioni con carichi elevati, e puoi ottimizzare i dispositivi I / O, ciò può davvero cambiare enormemente i requisiti hardware. Supponiamo che tu sappia che la cache dell'HDD è di circa 32MB, e che ama lo streaming di dati in blocchi da 8MB, e hai 16GB di RAM che sono economici e inattivi, potresti usare solo% di basso livello% con un buffer da 8MB e fare con esso. Il che toglierebbe tonnellate di lock e user > kernel- > le transizioni utente causate da letture più piccole, diciamo 64 KB ciascuna.
Il problema è che, in pratica, devi eseguire il programma sulla piattaforma di destinazione per ottenere i dati effettivi sulle prestazioni e ottimizzare per questo. E se porti quell'applicazione per dire ARM, le ottimizzazioni possono persino ritorcersi contro.
Quindi, perché non ci sono API per ottenere i valori di sweet-spot per l'architettura su cui stai lavorando.
Dì _read
, QueryOptimalHddReadBuffer
, QueryOptimalHddWriteBuffer
, QueryHddSeekTimeCharacteristics
, ecc.