반응형
순차처리
한 번에 하나씩 처리하는 방식, 이는 서로 독립적으로 실행한다.
병렬처리
여러 작업을 동시에 처리하는 방식, 이는 작업을 분할하면서 동시에 실행할 수 있다. 그러므로 실행 순서가 보장 되지 않는다.
Parallel 클래스
병렬처리를 위한 기능을 제공하는 클래스
public static class Parallel
01 Parallel Loops
배열 또는 컬렉션의 요소를 병렬적으로 처리한다. 작업의 실행 순서와 출력 순서가 보장되지 않는다.
for
public static System.Threading.Tasks.ParallelLoopResult For (int fromInclusive, int toExclusive, Action<int,System.Threading.Tasks.ParallelLoopState> body);
매개변수
fromInclusive : 시작 인덱스(포함)
toExclusive : 끝 인덱스(제외)
body : 반복당 한 번씩 호출되는 대리
int[] numbers = { 1, 2, 3, 4, 5 };
Parallel.For(0, numbers.Length, i => { Console.WriteLine($"i의 값은 {i}"); });
foreach
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Generic.IEnumerable<TSource> source, Action<TSource> body);
매개변수
TSource : 소스의 데이터 형식
source : 열거가능한 데이터
body : 반복하는 동안 호출되는 대리자
int[] numbers = { 1, 2, 3, 4, 5 };
Parallel.ForEach(numbers, number => { Console.WriteLine($"i의 값은 {number}");} );
02 Parallel Invoke
Parallel.Invoke를 사용하면 내부적으로 Task객체가 자동으로 생성된다. 이를 스레드 풀을 사용하면서 작업을 처리한다.
public static void Invoke (params Action[] actions);
매개변수
actions : 실행할 Action의 배열
public static void PrintMessage()
{
Task.Delay(1000).Wait();
Console.WriteLine("Thread : " + Thread.CurrentThread.ManagedThreadId);
}
static void Main(string[] args)
{
Parallel.Invoke(PrintMessage, PrintMessage, PrintMessage, PrintMessage, PrintMessage);
}
03 Parallel Partitioning
데이터를 작은 조각으로 분할하여 데이터를 병렬적으로 처리한다. 데이터의 순서는 분할 방식에 따라 유지되지만 작업의 실행순서는 보장되지 않는다.
public static OrderablePartitioner<TSource> Create<TSource>(IEnumerable<TSource> source);
int[] numbers = { 1, 2, 3, 4, 5 };
Parallel.ForEach(Partitioner.Create(numbers), number => { Console.WriteLine($"i의 값은 {number}"); });
반응형
'cs공부 > 운영체제' 카테고리의 다른 글
운영체제 - 페이징의 쓰기 시 복사(copy on write), 계층적 페이징 (0) | 2024.03.04 |
---|---|
운영체제 - CPU 스케줄링(우선순위, 스케줄링 큐, 선점 및 비선점형 스케줄링) (0) | 2024.01.21 |
운영체제 - TLS(Thread Local Storage) (0) | 2023.06.06 |
운영체제 - ReaderWriterLockSlim(RWLock), 사용자 정의 Lock구현 해보기 (0) | 2023.06.01 |
운영체제 - 제3자에게 부탁하기(AutoResetEvent,Manualresetevent ) (0) | 2023.05.31 |
댓글