Ответ на ваш вопрос приходит в виде двух, казалось бы, противоречивых утверждений:
1: Это уже делает
и
2: Вы не можете
Современные операционные системы и, следовательно, среды разработки используют потоки.Поток, по сути, представляет собой одну последовательность последовательных шагов (и слов, которые не начинаются с "S"), которые будет выполнять процессор.Эти потоки управляются операционной системой и архитектурой процессора, где процессор выполнит некоторую часть (или весь) потока, сохранит его состояние, а затем переключится на другой поток.
При наличии нескольких ядер (будь то многоядерные процессоры или просто несколько процессоров или оба) на самом деле возможно, чтобы компьютер выполнял два потока одновременно, предполагая, что они читают и записывают разные местав памяти (потоки, использующие одни и те же ресурсы, требуют синхронизации, которая представляет собой сложную внутриигровую игру), распределяя потоки по ядрам.
Опасаясь использовать слишком упрощенное сравнение, подумайте об этом так:Ваш код в его нынешнем виде представляет собой длинный список шагов, которые нужно выполнить для выполнения конкретной задачи.Теперь вы взяли этот список инструкций в комнату, полную людей (каждый из которых представляет собой ядро обработки), и вы хотели бы использовать каждого из этих людей максимально эффективно.Хотя в комнате, полной аспирантов, могут быть контекстные и предметные знания, чтобы понять, как разбить ваши инструкции на задачи для каждого отдельного человека, вы перенесли свой список в комнату, полную людей, которые превосходно следуют указаниям.но совершенно глупо, когда дело доходит до дедукции.В этом случае вам нужно принести различные наборы инструкций для каждого человека, чтобы при выполнении всех из них вы получали одинаковый результат.
Проще говоря, чтобыесли ваш код использует преимущества нескольких ядер или процессоров, вы должны разбить свою работу на небольшие, предпочтительно атомарные части кода.Конкретный метод, который вы используете для разбиения вашего кода на несколько потоков, может отличаться;использование System.Threading.ThreadPool
или более поздней библиотеки параллельных задач может упростить некоторые из этих вещей, хотя всегда есть компромисс (как и со всем) в эффективности или контроле.
Если вдаваться в подробности, чем этоТребуется посмотреть на ваш фактический код.Вам лучше найти кого-то с опытом написания надежного, производительного многопоточного кода (если это возможно, кто-то с недавним .NET опытом в этом, поскольку это поможет определить, какие библиотеки будут подходящими).