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