성능을 향상시키려는 작은 프로그램이 있습니다. 이 프로그램은 매우 단순하며 대부분 단일 재귀 함수를 기반으로합니다. 그러나 그 뒤에있는 데이터 세트는 상당히 크기 때문에 6,000,000,000 회 정도의 재귀가 필요하며 컴퓨터에 따라 4 ~ 6 시간 정도 소요됩니다. 데이터를 처리하는 I/O가 없기 때문에 코드를 최적화하는 데 꽤 많은 시간을 투자하여 개선의 60 %를 발견 할 수있었습니다.다중 스레드 재귀 작업
지금보고 싶은 것은 코드를 멀티 스레딩하여 호스트 컴퓨터의 모든 코어를 활용하는 것입니다. 그러나 스레드, 작업 및 Parellel 라이브러리의 비트를 사용하여 시도하고 부정적인 방식으로 성능에 충돌하지 않는 아무것도 찾을 수 없었습니다.
내가 찾고 있어요 당신 코드의 종류의 아이디어를 제공하려면, 당신은 함수의 각 실행 실행하는 데 오래 걸리지 않습니다 볼 수 있듯이
class Program
{
static void Main(string[] args)
{
RecursiveFunction(0);
Console.ReadLine();
}
static void RecursiveFunction(int currentLevel)
{
DoWork(currentLevel);
if (currentLevel < 1000)
for (int i = 0; i < (currentLevel % 6) + 1; i++)
RecursiveFunction(currentLevel + 1);
}
static void DoWork(int currentLevel)
{
Thread.Sleep(42);
}
}
, 그래서를 만드는 비용 각 재귀에 대한 스레드는 그만한 가치가 없습니다. 재귀의 각 분기는 길이가 다를 수 있으므로 각 분기의 길이를 알 수 없으므로 특정 레벨의 스레드가 올바른 방법이 아닙니다.
누구에게 의견이 있습니까?
'Parallel.For *'사용 – SLaks