정리가 필요한 카테고리(추후 정리)/C#,Unity

C#] Parallel 클래스를 이용한 병렬 프로그래밍

TwinParadox 2018. 5. 31. 19:33
728x90

2010년 이후로 줄곧 멀티 코어 보급률이 빠르게 늘어, 현 시점에서는 보급형 라인업에도 기본적으로 듀얼 코어가 탑재되는 시점에서, 다수의 코어를 활용하기 위해 .NET Framework 4.0에 추가된 개념. 병렬 루프에 관련한 메서드들을 제공한다. 이것을 이용해서 다수의 데이터를 병렬 처리하거나, 방대한 작업을 병렬 처리하는 것이 가능하다.


Parallel.For(), Parallel.Foreach()를 이용해서 병렬로 분할 처리하는 기능을 사용할 수 있으며 병렬 처리를 하는 경우 두 가지 특징이 있다.




단일 스레드로 처리하는 경우보다 더 빠른 처리가 가능함.

방대한 양의 데이터를 처리하는 경우, 다른 스레드에서 변경되는 값에 영향을 받지 않는다면 이 방법을 쓰는게 순차 처리하는 경우보다 빠른 시간 내에 데이터를 처리할 수 있음.




다중 스레드로 병렬 처리하는 경우, 반복문 내의 작업들이 인덱스 순서대로 진행되는 것은 아님.

예를 들어 1부터 1000까지 출력하는 경우 순차 처리는 1부터 1000까지 순서대로 나오지만, Parallel을 이용한 병렬 처리는 1부터 1000까지의 출력은 보장하되, 그 순서는 뒤섞일 수 있음.



using System;
using System.Threading;
using System.Threading.Tasks;

namespace ParallelClass
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1. 순차 처리
            for (int i = 1; i <= 1000; i++)
            {
                Console.WriteLine("{0}: {1}",
                    Thread.CurrentThread.ManagedThreadId, i);
            }
            // 2. 병렬 처리
            Parallel.For(1, 1000, (i) => {
                Console.WriteLine("{0}: {1}",
                    Thread.CurrentThread.ManagedThreadId, i);
            });
        }
    }
}


순차 처리




병렬 처리


728x90
728x90