이 블로그 검색

2012년 5월 18일 금요일

proactor design pattern (번역)

원문: http://www.cs.wustl.edu/~schmidt/PDF/proactor.pdf

인터넷에 번역된 문서를 찾을수는 있었지만... 번역이 매끄럽지는 않다. 그래서 직접 번역.

서문

현대의 운영체계들은 동시에 실행되는(*concurrent) 어플리케이션들을 개발하기 위한 여러가지 메카니즘을 제공하고 있다. *동기적 멀티쓰레딩은 동시에 여러 작업을 수행하는 어플리케이션을 개발하는데 있어 인기있는 메카니즘 이다.  그런데 가끔, 스레드들은 성능상의 오버헤드가 크고(즉 자원을 더 많이 필요로 한다), 동기화 처리에 대한 원칙들과 패턴들에 대해서도 깊은 이해를 요구한다.  이런 사유로, 점차 많은 수의 운영체계에서는 멀티 쓰레딩의 많은 오버헤드와 복잡성을 완화 시키면서 동시성의 이점을 제공하는 비 동기적 메카니즘을 지원하고 있다.  이 문서에서 소개된 Proactor 패턴은 OS가 제공하는 비동기적 메카니즘을 효율적으로 이용하기 위해서는, 어플리케이션들과 시스템을 어떻게 구성해야 하는지에 대해 기술하고 있다.

어플리케이션이 비동기적 동작을 호출할때, OS 는 어플리케이션을 대신해서 작업을 수행한다.
이 덕분에 어플리케이션에서는 작업들 갯수만큼 쓰레드를 생성하지 않고도, 동시에 여러 작업을 수행할 수 있다. 
따라서 Proactor 패턴은 동시 실행 프로그래밍을 단순화 시키고, 좀더 작은 수의 쓰레드를 사용할수 있으므로
성능의 향상을 가져오며, OS제공의 비동기 동작을 최대한 활용할수 있게 해준다. 

* Synchronous multi-threading : 흔히 "동기식" 멀티 쓰레딩 이라고 번역된다. 동기식 이라고 하는 이유는, 요청이 올때마다 즉시 완료될때까지 수행되기 때문이다. 이것은 blocking 동작이라는 의미도 내포하고 있다(참고) 개인적으로는 이 동기식 멀티 쓰레딩이란 말은 쉽게 의미가 와닿지 않는다라고 생각하지만, 일반적으로 널리 사용 되므로, 이 문서에서도 그대로 사용 하기로 한다 (;-)
concurrent :동시실행, 병행처리등으로 나타내질수 있겠지만, concurrent 와 Parallel 의 차이점을 
좀더 확실하게 구분하고 싶다면 다음글을 참고. http://www.linux-mag.com/id/7411/