Вот контекст: я пишу интерпретатор в С# для небольшого языка программирования под названием Heron и имеет некоторые примитивные операции с списком которые могут выполняться параллельно.
Одна из самых больших проблем, с которыми я сталкиваюсь, - это эффективно распределять работу, выполняемую оценщиком, по различным ядрам, всякий раз, когда встречается параллелизуемая операция. Это может быть короткая или длинная операция, ее трудно определить заранее.
Одна вещь, о которой мне не нужно беспокоиться, это синхронизация данных: параллельные операции явно не разрешают изменять данные.
Итак, у меня есть следующие основные вопросы:
- Каков наиболее эффективный способ распространения работы по потокам, чтобы я мог гарантировать, что компьютер будет распределять работу по двум ядрам?
Меня также интересует связанный с ним вопрос:
- Примерно, как долго должна выполняться операция, прежде чем мы сможем начать преодоление накладных расходов на разделение работы на другой поток?