Параллельная обработка возможна только в пределах конфигурации вашего сервера. Многие серверы могут обслуживать страницы в параллельном режиме, но, опять же, он ограничен несколькими. Вместо этого эмпирическое правило должно быть максимально быстрым и переходить к следующему запросу.
Относительно вашей обработки действительно большого списка данных в вашей базе данных. Прежде всего, вам потребуется список идентификаторов для рассылки, которую вы делаете:
INSERT INTO `mymailinglisttable` (mailing_id, recipient_id, senton) SELECT 123 AS mailing_id, mycontacttable.recipient_id, NULL FROM mycontacttable WHERE [insert your criterias for your contacts]
Далее вам понадобится либо innodb, либо какая-нибудь умная логика для параллельной обработки:
С InnoDB вы можете сделать некоторую блокировку на уровне строк, но не спрашивайте меня, как, ищите это сами, я вообще не использую InnoDB, но я знаю, что это возможно. Таким образом, вы читаете документы по этому вопросу, выбираете и блокируете несколько строк, отправляете электронные письма, помечаете как отправленные и стираете, повторяете операцию, вызывая свой собственный скрипт. (Либо с AJAX, либо с php-сокетом)
Без InnoDB вы можете просто добавить 2 поля в базу данных, одно из которых является processid, а другое - заблокированным. Если вы хотите заблокировать некоторые адреса для вашей обработки, выполните:
$mypid = getmypid().rand(1111,9999);
$now = date('Y-m-d G:i:s');
mysql_query('UPDATE mymailinglisttable SET mypid = '.$mypid.', lockedon = "'.$now.'" LIMIT 3');
Это заблокирует 3 строки для вашего pid, и в текущее время выберите строки, которые были заблокированы, используя:
mysql_query('SELECT * FROM mymailinglisttable WHERE mypid = '.$mypid.' AND lockedon = "'.$now.'")
Вы получите 3 строки, которые вы правильно заблокировали для обработки. Я склонен использовать эту версию больше, чем версию innodb, потому что я вырос с этим методом, но не потому, что он более производительный, на самом деле, я уверен, что версия InnoDB намного лучше, просто никогда не пробовал.