Разделяй и властвуй
Apr. 13th, 2015 12:19 pmПрочел вот тут про программистский флэшмоб начавшийся с этой записи. Накатал свою реализацию.
Основные идеи были:
1. Дать возможность варьировать размер подзадач для worker-ов.
2. Нигде не завязываться на число ядер CPU и число диапазонов (и даже стараться не упоминать о них в коде), нигде не мапить одно на другое.
Результаты в общем-то предсказуемы. Хотя обе идеи были реализованы, производительность слишком сильно зависит от размера подзадачи.
Скажем, если вычислительный квант составляет 1 мс - это еще туда-сюда. Если <100 мкс - уже гораздо хуже. Если же гранулярность повысить до 1 вычисления md5 на задачу, то результата можно вообще никогда не дождаться.
Выводов отсюда я сделал два:
1. Иногда постановка подзадачи на счет должна быть блокирующей (юзеру полезно дать такую возможность)
2. Логику переключения контекстов есть куда вылизывать
Основные идеи были:
1. Дать возможность варьировать размер подзадач для worker-ов.
2. Нигде не завязываться на число ядер CPU и число диапазонов (и даже стараться не упоминать о них в коде), нигде не мапить одно на другое.
Результаты в общем-то предсказуемы. Хотя обе идеи были реализованы, производительность слишком сильно зависит от размера подзадачи.
Скажем, если вычислительный квант составляет 1 мс - это еще туда-сюда. Если <100 мкс - уже гораздо хуже. Если же гранулярность повысить до 1 вычисления md5 на задачу, то результата можно вообще никогда не дождаться.
Выводов отсюда я сделал два:
1. Иногда постановка подзадачи на счет должна быть блокирующей (юзеру полезно дать такую возможность)
2. Логику переключения контекстов есть куда вылизывать