совет по архитектурной задаче
От: salvequick  
Дата: 29.06.16 19:42
Оценка:
Коллеги приветствую,
Хочу обратиться с советом по архитектурной задаче, решение которой я полностью провалил.
У меня было около 20 минут на решение .

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

Задача состоит в распределении обработчиков этих задач по ядрам, так чтобы ядра процессора не простаивали.
Обработчики задач будем считать чисто вычислительными, без каких то возможных ожиданий на ввод/вывод.
Т.е будем считать, что количество активных задач должно быть равным кол-ву ядер CPU.

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

Собственно задание: спроектировать структуру классов для решения данной задачи.
Взаимосвязи, интерфейсы и все такое.

Вопрос как действовать при решении подобных задач? Я в полной растерянности сейчас пребываю.

Я столько хочу готовое решение получить, сколько понять какие походы используются при решении подобных архитектурных задач. Какую литературу может почитать и т.д.
На ум приходят только "паттерны проектирования" и Александеску "Современное проектирование .... "

К сожалению на работе практики подобных задач нет, подобными вещами занимается выделенный отдел архитекторов ПО.
Re: совет по архитектурной задаче
От: Sinix  
Дата: 29.06.16 19:47
Оценка:
Здравствуйте, salvequick, Вы писали:

S>К сожалению на работе практики подобных задач нет, подобными вещами занимается выделенный отдел архитекторов ПО.

Если я правильно понял, то вопрос сводится к выбору из типовых реализаций пула задач (потоков). Дальше всё зависит от языка / фреймворка, универсального ответа не будет.
Re[2]: совет по архитектурной задаче
От: salvequick  
Дата: 29.06.16 20:10
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Если я правильно понял, то вопрос сводится к выбору из типовых реализаций пула задач (потоков). Дальше всё зависит от языка / фреймворка, универсального ответа не будет.


могу немного конкретизировать : язык С++ и платформа linux
Re: совет по архитектурной задаче
От: itslave СССР  
Дата: 29.06.16 20:45
Оценка: 7 (2) +1
Здравствуйте, salvequick, Вы писали:

S>Хочу обратиться с советом по архитектурной задаче, решение которой я полностью провалил.

Подозреваю что от тебя хотели услышать про размышления на тему паттерна producer-consumer с акцентом в сторону стоимости синхронизации и неблокирующих очередей а ля disruptor
Re: совет по архитектурной задаче
От: vsb Казахстан  
Дата: 29.06.16 21:00
Оценка:
Ставишь тред пул по числу ядер и всё. Какие там ещё классы и интерфейсы. implements Runnable и всего делов.
Re: совет по архитектурной задаче
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 30.06.16 00:35
Оценка:
Здравствуйте, salvequick, Вы писали:

S>Я столько хочу готовое решение получить, сколько понять какие походы используются при решении подобных архитектурных задач. Какую литературу может почитать и т.д.

S>На ум приходят только "паттерны проектирования" и Александеску "Современное проектирование .... "

У microsoft была статья (или даже книга?) на тему concurrency patterns. Сходу не нашел. Там конечно во всю опираются на Task Parallel Library в .NET но основные алгоритмы разобраны.

Суть решения твоей задачи состоит в очереди и рабочих потоках по числу ядер.
Несколько вопросов, на которые надо ответить:
1) Как будет происходить конкурентный доступ к очереди? Чтобы одновременное взятие задачи из очереди и исполнение ничего не поломал. Ответ — lock-free очереди.
2) Что делать если задач нет — тут надо исходить из требований. Можно гасить потоки и запускать, если нет свободных, а можно использовать примитивы синхронизации для остановки отдыхающих (с минимальным оверхедом).
3) Как сигнализировать о завершении — тут надо просто посмотреть как сделан IAsyncResult в .NET.
4) Как сделать thread affinity в такой системе, ибо не любой код может исполняться в разных потоках.
5) Скорее всего будут детали связанные именно с *nix, ибо в винде есть встроенные thread pool, там задачи неактуальна.
Re[2]: совет по архитектурной задаче
От: itslave СССР  
Дата: 30.06.16 08:22
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Ставишь тред пул по числу ядер и всё. Какие там ещё классы и интерфейсы. implements Runnable и всего делов.

а потом оказывается что у тебя потоки 80% времени на локах висят. Внезапно, ога.
Re[3]: совет по архитектурной задаче
От: vsb Казахстан  
Дата: 30.06.16 09:06
Оценка:
Здравствуйте, itslave, Вы писали:

I>Здравствуйте, vsb, Вы писали:


vsb>>Ставишь тред пул по числу ядер и всё. Какие там ещё классы и интерфейсы. implements Runnable и всего делов.

I>а потом оказывается что у тебя потоки 80% времени на локах висят. Внезапно, ога.

> Есть ряд поступающих разнородных событий, сетевые,от файловой системы, от видеокамеры к примеру ну и т.д


> Обработчики задач будем считать чисто вычислительными, без каких то возможных ожиданий на ввод/вывод.


Зачем додумывать то, чего нет в задаче. Никаких локов нет. Качественных реализаций Thread-пулов полно.
Re[2]: совет по архитектурной задаче
От: Spinifex Россия https://architecture-cleaning.ru/
Дата: 30.06.16 11:09
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, salvequick, Вы писали:


S>>Я столько хочу готовое решение получить, сколько понять какие походы используются при решении подобных архитектурных задач. Какую литературу может почитать и т.д.

S>>На ум приходят только "паттерны проектирования" и Александеску "Современное проектирование .... "

G>У microsoft была статья (или даже книга?) на тему concurrency patterns. Сходу не нашел. Там конечно во всю опираются на Task Parallel Library в .NET но основные алгоритмы разобраны.

Вот эта? Parallel Programming with Microsoft® .NET Или что-то поновее есть?
Re[3]: совет по архитектурной задаче
От: _Artem_ Россия  
Дата: 30.06.16 11:31
Оценка:
Здравствуйте, itslave, Вы писали:

I>Здравствуйте, vsb, Вы писали:


vsb>>Ставишь тред пул по числу ядер и всё. Какие там ещё классы и интерфейсы. implements Runnable и всего делов.

I>а потом оказывается что у тебя потоки 80% времени на локах висят. Внезапно, ога.
Да, да, да, конечно. Если задачи очень маленькие, то может и будет оверхед на локах. В любом случае лучше это профилировать, чем стрелять из lock-free по воробьям. Тем более там где оно не нужно.
Re[3]: совет по архитектурной задаче
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 30.06.16 12:33
Оценка:
Здравствуйте, Spinifex, Вы писали:

S>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, salvequick, Вы писали:


S>>>Я столько хочу готовое решение получить, сколько понять какие походы используются при решении подобных архитектурных задач. Какую литературу может почитать и т.д.

S>>>На ум приходят только "паттерны проектирования" и Александеску "Современное проектирование .... "

G>>У microsoft была статья (или даже книга?) на тему concurrency patterns. Сходу не нашел. Там конечно во всю опираются на Task Parallel Library в .NET но основные алгоритмы разобраны.

S>Вот эта? Parallel Programming with Microsoft® .NET Или что-то поновее есть?

Похоже что она, хотя мне кажется я на сайте читал статьи. Возможно из них книга и составлена.
Re[3]: совет по архитектурной задаче
От: jazzer Россия Skype: enerjazzer
Дата: 30.06.16 14:02
Оценка:
Здравствуйте, salvequick, Вы писали:

S>Здравствуйте, Sinix, Вы писали:


S>>Если я правильно понял, то вопрос сводится к выбору из типовых реализаций пула задач (потоков). Дальше всё зависит от языка / фреймворка, универсального ответа не будет.


S>могу немного конкретизировать : язык С++ и платформа linux


для управления задачами можно использовать Intel TBB — он работает на task stealing.
Для параллельной обработки событий из разных источников можно использовать asio — его можно запускать в многопоточном режиме, плюс асинхронка из коробки.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[4]: совет по архитектурной задаче
От: itslave СССР  
Дата: 30.06.16 16:11
Оценка:
Здравствуйте, _Artem_, Вы писали:

I>>а потом оказывается что у тебя потоки 80% времени на локах висят. Внезапно, ога.

_A_>Да, да, да, конечно. Если задачи очень маленькие, то может и будет оверхед на локах. В любом случае лучше это профилировать, чем стрелять из lock-free по воробьям. Тем более там где оно не нужно.
Давай не забывать, что речь шла о собеседовании, а не о решении реальных задач.
Re[5]: совет по архитектурной задаче
От: salvequick  
Дата: 30.06.16 18:32
Оценка:
Здравствуйте, itslave, Вы писали:

I>Давай не забывать, что речь шла о собеседовании, а не о решении реальных задач.


надо понимать, что в конечном счете всех реальные задачи интересуют
Re[6]: совет по архитектурной задаче
От: itslave СССР  
Дата: 01.07.16 07:51
Оценка:
Здравствуйте, salvequick, Вы писали:

S>Здравствуйте, itslave, Вы писали:


I>>Давай не забывать, что речь шла о собеседовании, а не о решении реальных задач.


S>надо понимать, что в конечном счете всех реальные задачи интересуют

На собеседовании обычно стараются понять есть ли у автора нужный бекграунд и умеет ли он этим бекграундом правильно пользоваться. А реальные задачи — это в проде.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.