Разница в функциональности между приложением, имеющим «внутренние» / «внешние» потоки демона

#python #linux #multithreading

#python #linux #многопоточность

Вопрос:

Есть ли разница в функциональности работы с потоками между приложением с 3 потоками демонов, которые все извлекаются из многопроцессорной очереди и 4 отдельными приложениями: многопроцессорной очередью / каналом и 3 приложениями с потоками демонов, которые считывают данные из приложения очереди / канала?

Ни одно из приложений не использует блокировку / синхронизацию. В конце концов, операционная система сама решит, когда разрешить запуск потока и как долго. Есть ли здесь какие-либо другие различия в функциональности или они по сути одинаковы?

Универсальное приложение (без синхронизации или блокировки):

  • Очередь «Биржевой ленты»: сообщения о биржевой торговле (диктофоны)
  • «TradingStrategy» 1 Поток демонов: извлекать из очереди, проверять сообщения и совершать сделки
  • «TradingStrategy» 1 Поток демонов: извлекать из очереди, проверять сообщения и совершать сделки
  • «TradingStrategy» 1 Поток демонов: извлекать из очереди, проверять сообщения и совершать сделки

Альтернативная архитектура:

Загружайте приложение (без многопоточности):

  • Очередь или канал «Биржевой ленты»: сообщения о биржевой торговле (диктофоны). Можно ли получить доступ к очереди из другого внешнего процесса? Я знаю, что именованный канал может, но может ли очередь?

Торговое приложение (без многопоточности):

  • ‘TradingStrategy’: взаимодействует с каналом (каналом? / очередью), проверяет сообщения и совершает сделки

Торговое приложение (без многопоточности):

  • ‘TradingStrategy’: взаимодействует с каналом (каналом? / очередью), проверяет сообщения и совершает сделки

Торговое приложение (без многопоточности):

  • ‘TradingStrategy’: взаимодействует с каналом (каналом? / очередью), проверяет сообщения и совершает сделки

Комментарии:

1. В альтернативной арке это потоки? или процессы?

2. @JohnMee Нет, в настоящее время каждое приложение не использует многопоточность. Я обновлю вопрос, чтобы показать это.

3. Итак, вы спрашиваете, есть ли разница между запуском одного процесса с четырьмя потоками или четырех процессов с одним потоком в каждом?

4. @JohnMee да, это правильно

Ответ №1:

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

Теперь, учитывая ваш конкретный сценарий, предполагая, что под «многопроцессорной очередью» вы на самом деле подразумеваете экземпляр очереди python в одном потоке процесса, поскольку очередь находится внутри того же процесса, что и все рабочие потоки, рабочие смогут получить доступ к тому же экземпляру очереди и совместно использовать его.

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

На практике я бы подумал о том, что вашей очередью будет что-то вроде redis или zeromq, затем создайте программу на python для взаимодействия с ней, затем увеличьте ее количество копий, сколько вам нужно.

Комментарии:

1. спасибо, вы знаете, возможно ли иметь полнодуплексный именованный канал с 1 устройством записи (Market Feed) и 3 устройствами чтения (приложения для торговых стратегий)? Также рассматривается dbus или dbus glib.

2. @JakeM извините, понятия не имею, я бы просто погуглил и попытался интерпретировать для вас. Но я скажу, что многопроцессорная библиотека python не так уж и страшна, просто начните играть с ней и посмотрите, что вы можете / не можете сделать. Следует отметить, что он работает путем изменения / сериализации всего, что определяет, что вы можете / не можете делать.