Напишу что за хрень я делаю.
Есть список с email, с которых отправляются мессаги.
Берется email, заходится в почту.
Проверяется наличие новой почты.
Дальше идет прогон по новым письмам.
Первое что делается, это
берется адресат и смотрится есть ли его мыло в другом списке, ну типа писалось уже или нет.
Если нет, то это мыло добавляется в список и адресату пишется ответ.
Если есть, то берется следующее письмо.
И т.д.
Так вот проблема в том, что на
разные email с которых делаю рассылку могут приходить письма от одних и тех же адресатов.
Когда это делается в один поток - проблем нет, все отрабатывается по очереди.
При многопотоке, может получиться так, что разные потоки при обработке входящих могут наткнутся на одного и того же адресата.
И проверив, что его нет в списке "кому уже писалось", отправят каждый по письму. Что не есть гуд.
Поэтому прежде чем применять все это дело на рабочем шаблоне, хотел протестить многопоточность.
Что мне надо было для себя уяснить:
1. Каждый поток берет
новую строку из списка email от которых будут слаться мессаги.
Ну с этим вроде бы ок. На форуме где то читал, что если прикреплять список к файлу, через "сохранять изменения в файл", то гарантируется потокобезопасность.
2. Проверка наличия адресата/запись в список должна быть потокобезопасной, чтобы не было дублей и прочей хрени.
Это я так понял делается через блокировку с использованием объекта синхронизации
SyncObjects.ListSyncer, сделанного спец. для списков.
Если это делается как то по другому - просьба написать КАК.
3. Производительность, сколько потоков поднимается, во сколько уменьшается кол-во времени для отработки.
А теперь мои выводы:
1. Тут хрен знает, точно ли берутся разные строки, можно тоже замутить проверку.
2. С этим убедился, дублей нет.
3. Почему так мало поднимается потоков - х.з.