Python аргумент, передающий служебную информацию и ссылку на объект - PullRequest
0 голосов
/ 03 апреля 2020

Я построил несколько потоковых серверных проектов с Python, и синхронизация всегда вызывает раздражение.

Часто, когда работа передается из потока в другой, возникает необходимость найти связанный объекты и информация из структур данных, доступ к которым осуществляется из нескольких потоков. Синхронизация с блокировками и т. Д. c является каноническим подходом, но зачастую трудно быть уверенным в том, что ваша синхронизация действительно точна. Это может быть обойдено путем переноса связанных объектов вдоль конвейера обработки даже там, где они не нужны.

Так как это обычно ссылки на объекты, насколько это увеличит накладные расходы? По всем логикам c это не должно быть на самом деле, так что это обычная практика?

1 Ответ

0 голосов
/ 03 апреля 2020

На этот вопрос было бы легче ответить с большим контекстом. Но в целом не требуется значительных затрат времени на передачу нескольких ссылок на объекты в полезной нагрузке задания. Объем служебной памяти, связанной с каждым потоком ОС, вероятно, больше, чем вся память, используемая локальными ссылками потока. Основной риск заключается в том, что хранение ненужных ссылок предотвратит сбор мусора, но это также произойдет, если вы сохранили эти объекты в глобальной структуре данных.

Синхронизация с блокировками и т. Д. c является каноническим подход, но зачастую трудно быть уверенным в том, что ваша синхронизация действительно точна.

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

Пока вы не делаете глубокие копии огромных структур данных для каждого отдельного потока, все будет в порядке. , Обычно рекомендуется сохранять контекст задания в локальном хранилище потока, где к нему можно обращаться без конфликта с другими потоками.

...