Если я слушаю веб-сокет в одном потоке и запускаю функцию в другом потоке, возможно ли пропустить сообщения - PullRequest
0 голосов
/ 16 мая 2018

Название говорит все это на самом деле. Я запускаю программу на экземпляре Linux EC2 с 4 потоками. Три из них слушают различные веб-сокеты, а последний - веб-копирование и, при необходимости, вызывает набор других функций.

Возможно ли, что если GIL принадлежит 4-му потоку (т. Е. В настоящее время он выполняет вычисления через одно ядро), то сообщения веб-сокета могут быть "пропущены" прослушивающими потоками?

Я начинаю думать, что это невозможно, но не понимаю, почему. Я оглянулся, но безрезультатно.

1 Ответ

0 голосов
/ 17 мая 2018

Не совсем, даже если ваше приложение полностью заблокировано, например, по расписанию или просто в спящем режиме, операционная система поставит в очередь входящие сетевые сообщения. Вы можете потерять сообщения, например, если буфер TCP начинает переполняться, я считаю, что это вряд ли в вашем случае. Вы можете проверить свою идею, сознательно поспав некоторое время в 4-м потоке, и посмотрите, не отброшены ли сообщения.

...