Фрилисты с параллельными распределителями - PullRequest
0 голосов
/ 15 января 2010

Фрилисты являются распространенным способом ускорения выделения путем повторного использования существующей памяти, которая уже была выделена. Есть ли способ использовать свободные списки в параллельном распределителе, не вызывая накладных расходов на блокировку для каждого выделения (что нейтрализует предполагаемый выигрыш в производительности для freelist)?

Ответы [ 2 ]

1 голос
/ 15 января 2010
0 голосов
/ 22 января 2010

Возможно, у вас есть свободные от списка потоки.

По сути, существует некоторая система, которая заполняет свободные списки (например, сборщик мусора). Тогда у каждого потока может быть свой собственный свободный список, содержащий небольшое количество записей. Блокировка будет использоваться для выделения нового чанка. С блоками с 30 записями вы блокируете только один раз каждые 30 распределений. И наоборот, при работе с кусочками, специфичными для потоков, вам, возможно, придется запускать GC раньше, поскольку общий список может стать пустым, даже если некоторые из кусочков, специфичных для потоков, по-прежнему содержат свободные записи.

...