Ti darò un'analogia.
Immaginate una coda al venditore ambulante dove le persone si uniscono alla fine della fila e vengono servite dal fronte. Man mano che ogni persona viene servita, le persone rimanenti nella coda si spostano in avanti (di solito borbottano per quanto tempo sta prendendo) e alla fine si uniscono nuove persone. In questo esempio le persone devono spostarsi in avanti per consentire ad altre persone di unirsi alla linea, altrimenti la fine della coda si allontanerebbe sempre di più dal venditore. Quindi in questo esempio il server rimane in prima fila e si occupa di chiunque sia davanti o di nessuno.
Ora immagina se le persone non si muovono ma invece dopo aver servito il capo della coda il venditore si è spostato ulteriormente lungo la coda, spostandosi in effetti verso il punto in cui si trova il capo della coda. Alla fine, dopo aver servito 100 persone, il server è a metà strada e dopo il 500 il server si trova ora nella strada successiva ecc. Dove si ferma?
Quindi per comodità il venditore mappa una vasta area circuitale dove le persone possono sempre unirsi alla fine della coda e si sposta sempre verso la persona successiva, ma la coda rimane in un posto. Fa semplicemente la fila per servire le persone. Certo, può solo servire le persone in coda, ma a condizione di renderlo abbastanza grande da poter tenere il passo con la domanda, e non deve allontanarsi dalla sua area di vendita designata.
Riportare questa analogia ai computer ... nel prima esempio c'è un gestore code e man mano che gli articoli vengono revisionati rimescola gli elementi lungo il buffer. Nell'esempio secondo, il programma viene eseguito finché non vi è più memoria da aggiungere all'array = la sua dimensione fissa (definita o limitata dallo spazio).Nell'esempio terzo, il server si sposta in testa alla coda come il secondo, ma l'array è fisso e solo così tanti elementi possono unirsi alla coda, ma riceveranno comunque FIFO assistito.
tl; dr: Gestione efficiente delle risorse.
fonte
2012-10-05 23:24:35
Penso che anche con slot illimitati sia ancora utile riutilizzare quelli che si hanno in modo circolare. –
In uno scenario illimitato, libererei la memoria su un 'get()' e sulocate nuova memoria su un 'add()'. Quindi riuso gli slot ma non ho un ordine fisso. – Simulant
Penso che Simulant si riferisca ad una coda supportata da una struttura dati dinamica come una LinkedList. In questi casi, non ha senso "riutilizzare gli slot" perché non ci sono slot, solo "link di supporto" che possono essere creati e scartati a basso costo. In realtà, in generale, il tentativo di riutilizzare eccessivamente oggetti costruiti a basso costo può portare a problemi di prestazioni consentendo agli oggetti di migrare in una classificazione dello spazio dell'heap a cui non appartengono. –