In un ambiente di programmazione con multithreading, il contenimento del blocco sull'heap è spesso un collo di bottiglia delle prestazioni.
In teoria, almeno, la soluzione crema-del-raccolto per questo problema è di avere l'allocatore scalabile / parallelo [izing] completamente privo di blocco. Tuttavia, mi sembra che oltre a pochi documenti di ricerca (ad es. [1] [2] [5]), che contengono risultati sperimentali promettenti, gli allocatori interamente privi di lock non siano passati agli ambienti di produzione. Sarei felice se tu potessi dimostrarmi in errore con contro-esempi però. Quindi quali sono le ragioni pratiche per questa lenta (o inesistente) adozione di allocatori lock-free? Si noti che gli allocatori scalabili più diffusi come quello della TBB di Intel non sono privi di blocco nonostante utilizzino blocchi a grana fine (cfr. 315 in [3]).
Per quel che vale, ho anche trovato un progetto / carta per studenti CMU [4], che afferma di aver implementato un allocatore lock-free che è "leggermente migliore di [Google's] tcmalloc" su un massimo di 64 core. Un altro punto interessante di questo articolo è che "llalloc in questi test è l'allocatore LockLess di Lockless Inc., che non è bloccato al 100% (ha un blocco attorno all'heap globale)". jemalloc e ptmalloc sono anche testati qui.
References:
[1] Michael, Maged M. "Allocazione dinamica della memoria dinamica senza blocco. " ACM Sigplan Avvisi 39.6 (2004): 35-46. Ho trovato un'implementazione [re] indipendente dell'algoritmo di Michael al link
[2] Huang, Xiaohuang, et al. "Xmalloc: un allocatore di memoria dinamico senza blocco scalabile per macchine a molti core." Computer and Information Technology (CIT ), 2010 Conferenza internazionale IEEE su. IEEE, 2010. Versione gratuita del documento come tesi di laurea .
[3] Kukanov, Alexey e Michael J. Voss. "I fondamenti per software scalabile multi-core in Intel Threading Building Blocks. " Intel Technology Journal 11.4 (2007).
[4] Alex Podolsky, Nah Lock: un Allocatore di memoria Lock-Free ; apparentemente scritto nel 2013 in base ai timestamp della directory madre e al suffisso "S13" nel nome del corso.
[5] Gidenstam, Anders, Marina Papatriantafilou e Philippas Tsigas. "NBmalloc: allocazione della memoria in modo bloccato" Algorithmica 58.2 (2010 ): 304-338. Codice sorgente disponibile per questo.
Come nota a piè di pagina, vedo che ci sono 4 voti chiusi in sospeso per questa domanda, ma non vedo nessuno per Perché la grafica vettoriale con accelerazione hardware non viene rimossa? . Sarebbe interessante se qualcuno potesse spiegare perché una domanda che potrebbe potenzialmente essere risolta con numeri di prestazione un po 'oggettivi è più basata sull'opinione di quella in cui il fattore principale è l'orientamento al mercato di 2-3 grandi aziende.