Я бы определенно посмотрел на TPL. Это позволяет вам абстрагироваться от вашей проблемы. Вы можете думать о задачах и о том, как они работают и обмениваться данными, вместо того, чтобы тратить как можно больше времени на базовую модель потоков, создавать потоки wn и управлять ими. TPL позволит вам создавать задачи, которые он назначает пулу потоков. Затем TPL управляет пулом и регулирует количество выполняемых задач, чтобы максимизировать производительность. Он будет делать это на различных аппаратных конфигурациях (ядрах), что облегчает разработку и приложение, которое не будет нуждаться в значительной переписке при перемещении между различными аппаратными средствами.
Есть еще много вещей, о которых вы должны подумать, особенно в отношении общего состояния. TPL обычно является лучшим подходом, чем собственный, если вы не обладаете большим опытом работы с потоками и / или у вас есть специальное приложение, которое TPL плохо подходит.
1.Они должны быть инициализированы с помощью другой «метрики оптимизации». В
Другими словами, они пытаются
оптимизировать разные вещи, с
уровень приоритета, установленный в коде. это
означает, что они все немного отличаются
Расчет двигателей. Я не уверен, если я
можно сделать это с помощью TPL ..
Это можно сделать, создав задачи и передав им разные начальные условия.
2.Если один из потоков находит лучшее решение, которое в настоящее время наиболее известно
решение (которое должно быть разделено
во всех темах) тогда нужно
обновить лучшее решение и заставить
количество других тем для перезапуска
(опять же это зависит от приоритета
уровни оптимизации показателей).
Можно отменить задания и запустить новые.
3.Можно также пожелать объединить некоторые вычисления в потоках (например, сохранить
союз вероятностей для определенного
подход к проблеме). Это
возможно, более необязательный.
Не уверен, что понимаю это требование.
4. Очевидно, что вся система должна быть поточно-безопасной, и я хочу, чтобы она была
работает как можно быстрее.
Даже если вы используете TPL, если вы делитесь данными между задачами (потоками), тогда вы по-прежнему несете ответственность за обеспечение безопасности потоков. Тем не менее, TPL поставляется с несколькими поточно-безопасными классами для очереди, коллекции, сумки и т. Д.
Судя по звукам этого варианта паттерна мастер / работник с добавлением некоторого умозрительного исполнения и кражи работы. Вы можете найти более подробную информацию об этом и других паттернах в http://parallelpatterns.codeplex.com/, внизу есть ссылка страницы к белой книге Стивена Туба, в которой также содержатся дополнительные сведения.