Одним из подходов может быть использование списка с двойной буферизацией, когда одна очередь заполнена, начните заполнять следующую, а тем временем попросите другой поток записать полную очередь на диск асинхронно, а затем очистить ее (и затем повторять).
Вы также можете поэкспериментировать, чтобы сделать его тройным или n-ным буфером, если хотите увеличить скорость.