#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 не так уж и страшна, просто начните играть с ней и посмотрите, что вы можете / не можете сделать. Следует отметить, что он работает путем изменения / сериализации всего, что определяет, что вы можете / не можете делать.