Skip to content

생계형 개발자 수첩 ver4.0

이제 나이 먹어 강제로 4.0 버전업됨, 일인개발자임, 파키스탄식 코딩.. 오래된 코드도 다시 쓴다.

C# 병렬 ( Parallel ) 처리 패턴

Posted on 2017년 12월 5일 by kimczip

참조 문서 : MSDN Task Parallelism (Task Parallel Library)

함께 읽어보면 도움 되는 자료 링크 : http://blog.powerumc.kr/175?category=206843

 

개인적으로 멀티 작업 처리를 할 때 자주 쓰는 패턴이다.

모든 상황에 병렬처리가 꼭 좋은 성능을 발휘하는건 아니므로 상황에 따라 적절히 사용하는게 좋다.

using System.Threading.Tasks;
using System.Collections.Concurrent;


Object _lockObject = new Object();

// READ OR WRITE DATA
List<object> _testObject = new List<object>();



.....

// PATTERN
Task task = Task.Factory.StartNew(() =>
{
	int maxWorkingCount = _testObject.Count;
	int workingRangeSize = 1;
	int processedCount = 0;
        // 논리 프로세스 수량 만큼 쓰레드 생성
	if (maxWorkingCount > Environment.ProcessorCount)
	{
	    workingRangeSize = maxWorkingCount / Environment.ProcessorCount;
	}

	var part = Partitioner.Create(0, maxWorkingCount, workingRangeSize);
	Parallel.ForEach(part, (num, state) =>
	{
	   
	    for (int i = num.Item1; i < num.Item2; i++)
	    {
                // 처리하고자 하는 데이터 읽기
                object currentData = _testObject[i];
                // 현재 처리 수량
		processedCount++;
                
                
                // 만약 처리 데이터를 한곳에 모으고 싶다면 lock을 사용
                lock(_lockObject)
                {
                      // 예제      
                      object processedObject = Process(currentData);
                      _testObject.Add(processedObject);
                }                

	    }// END FOR
      
	});
});

// 이 부분은 필요에 따라 작성하던.. 안하던..
try
{
        // 처리가 완료 될때 까지 대기
	task.Wait();

        // 후 처리 영역

}
catch (AggregateException ex)
{
	// 쓰레드 영역 예외
}
catch(Exception ex)
{
       // 후 처리 예외
}

.....

 

 

Share the post "C# 병렬 ( Parallel ) 처리 패턴"

  • Facebook
  • X
Posted in 3.0Tagged C#, Parallel, 병렬처리

글 내비게이션

C# OpenCV Kmeans
MySQL, Maria DB 글자 검색 수 설정

답글 남기기 응답 취소

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.

버전

  • 3.0
  • 4.0

최근에..

  • 실행파일 디지털 서명하기 (프로그램 배포)
  • 자신의 PC에 막혀 있는 포트 검색
  • DB Table Column 이름 가져오기.
  • DLL 파일 PublicKeyToken 얻기
  • DSM 7.0에서 MariaDB 10 설정

Tags

10Gbps AMD Bitspower C# Command Control Corsair Crawling Exception F4-3200C14D-16GFX FLAREX G.Skill git gogs MariaDB MySQL NAS OpenCV Parallel PC-O9 rainmeter Ryzen scimitar Thermaltake UI Web WinForm 개발팁 개인사업자 광명시청 네트워크속도 데이터베이스 라이젠 랜선 랜케이블 리안리 메모리 명령프롬프트 수냉쿨링 수로 시놀로지 직구 커스텀쿨링 컴퓨터 퍼옴
Proudly powered by WordPress | Theme: micro, developed by DevriX.