비동기 태스크

 

다중 스레드 프로그래밍을 복잡하게 하는 요인에는 다음과 같은 것들이 있다.

1.     비동기 작업의 완료 여부 감시 : 가급적 폴링이나 대기 이외의 방법을 통한 비동기 작업 완료 여부 판단이 필요하다.

2.     스레드 풀링 : 스레드 풀링을 이용하면 스레드를 시작하거나 제거하는 데 드는 비용의 많은 부분을 줄일 수 있다. 또한 너무 많은 스레드를 만들어서 스레드를 실행하는 것보다 콘텍스트 변경에 더 많은 시간을 낭비하게 되는 상황도 피할 수 있다.

3.     교착 상태 회피 : 서로 다른 두 개의 스레드가 보호되는 데이터에 동시에 접근하려고 할 때 발생할 수 있는 교착 상태를 방지해야 한다.

4.     데이터 엑세스에 대한 동기화와 연속되는 작업들에 대한 원자성 제공 : 작업을 동기화하면 여러 작업들을 단일 작업 단위로 묶고 다른 스레드와 연관된 작업을 적절하게 수행할 수 있다. 잠금 기능을 이용해서 두 스레드가 같은 데이터를 동시에 접근하지 못하도록 할 수 있다.

 

오래 실행되는 메소드는 비동기적으로 호출하도록 다중 스레드 프로그래밍을 이용할 필요가 있다. 이와 같은 시나리오들에 대응하려고 개발자들이 점점 더 많은 다중 스레드 프로그래밍을 하게 되면서 공통된 처리 시나리오 집합과 프로그래밍 패턴들이 속속 등장하고 있다.

C# 5.0에서는 닷넷 4.0 TPL을 이용하는 TAP과 같은 패턴과 이를 지원하기 위한 C# 언어의 새로운 구조로 인해 한층 강력한 프로그래밍이 가능해졌다. 이번 절과 다음 절에 걸쳐 우선 TPL 자체를 살펴 본 다음에 간편하게 TAP 프로그래밍이 가능하게 해주는 async/await 문맥적 키워드를 TPL과 사용하는 방법을 자세히 살펴 볼 것이다. 19장에서는 후반부 절반 정도를 할애해서 TPL C# 5.0을 사용할 수 없는 상황에서 알고 있어야 할 추가적인 다중 스레딩 패턴들을 살펴본다.

 

 

 - Essential C# 5.0 (C#의 기초와 고급을 아우르는 핵심 바이블) - 18장 다중 스레딩

 

+ Recent posts