Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
05-16 20:20
관리 메뉴

nomad-programmer

[Programming/C#] 병렬 처리를 위한 Parallel 클래스 본문

Programming/C#

[Programming/C#] 병렬 처리를 위한 Parallel 클래스

scii 2020. 10. 1. 01:09

System.Threading.Tasks.Parallel 클래스

이 클래스는 For(), Foreach() 등의 메소드를 제공하여 Task<TResult>를 이용한 병렬 처리를 더 쉽게 구현할 수 있도록 해준다.

void SomeMethod(int i)
{
    Console.WriteLine(i);
}

// ...

Parallel.For(0, 100, SomeMethod);

위 코드에서 Parallel.For() 메소드는 SomeMethod()를 병렬로 호출하면서 0부터 100사이의 정수를 메소드의 매개 변수로 넘긴다. SomeMethod() 메소드를 병렬로 호출할 때 몇 개의 스레드를 사용할지는 Parallel 클래스가 내부적으로 판단하여 최적화한다.

병렬 처리로 소수를 찾는 예제

using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace CSharpExample
{
    internal class MainApp
    {
        static bool IsPrime(long number)
        {
            if (number < 2)
            {
                return false;
            }
            if (number % 2 == 0 && number != 2)
            {
                return false;
            }
            for (long i = 2; i < number; i++)
            {
                if (number % i == 0)
                {
                    return false;
                }
            }
            return true;
        }

        static int Main(string[] args)
        {
            long from = 0;
            long to = 100000;

            DateTime startTime = DateTime.Now;

            List<long> total = new List<long>();

            Parallel.For(from, to, (long i) =>
            {
                if (IsPrime(i))
                {
                    total.Add(i);
                }
            });

            DateTime endTime = DateTime.Now;

            TimeSpan ellapsed = endTime - startTime;

            Console.WriteLine("Prime number count between {0} and {1}: {2}",
                from, to, total.Count);
            Console.WriteLine("ellapsed time: {0}", ellapsed);

            return 0;
        }
    }
}


*/ 결과

Prime number count between 0 and 100000: 9592
ellapsed time: 00:00:00.6693154

*/
Comments