행복한 아빠

멀티 태스킹을 할 때와 하지 말아야 할 때 본문

하고싶은말

멀티 태스킹을 할 때와 하지 말아야 할 때

행복한아빠 2010. 3. 10. 09:05
요즘 사용하는 대부분의 컴퓨터는 멀티 태스킹을 지원합니다. 굳이 새삼스럽게 멀티태스킹 이야기를 하는 이유는 요즘 배치작업 관리 설계를 하다가 멀티 프로세스 처리방법과 싱글 프로세스 처리방법에 대한 이야기가 생각나서 글을 적어봅니다.

멀티태스킹이 빠르다?

두 개의 작업이 있을 때 이를 모두 처리하기 위한 시간은 두 개 작업을 병렬도 동시에(2개 프로세스) 처리하는게 빠를까요. 직렬로 하나를 먼저 처리하고 다음 것을 처리하는게 빠를까요.
그냥 이론적으로만 따져볼 때 직렬로 하나의 프로세스로 처리하는게 빠릅니다.


그림의 예를 보시면 작업1, 2 각각 5개의 CPU clock을 필요로 하는 작업이라고 가정합니다. 그리고 수행할 작업을 교체해 주기 위한 스위칭에는 1 clock이 소요된다고 가정합니다.
그러면 두 작업이 모두 끝나기 위해서는 멀티 프로세스로 처리했을 경우 총13 clock, 단일 프로세스는 11 clock 소요됩니다. 즉 스위칭 타임이 빈번할수록 전체 처리시간은 길어지게 됩니다.


멀티태스킹이 빠를 것 같은데??

실제 컴퓨팅 작업시간이 CPU 속도만 관련되지 않기 때문입니다. 작업을 처리하는 동안 자원을 접근하는 경우 이는 CPU 속도에 비해 많이 느립니다. 이 때 자원에 대한 응답 기다리는 동안 다른 작업을 처리하는게 전체 시간을 줄이는데 유리합니다. 웹 브라우저를 예를 들면 한페이지에 나타내기 위해 필요한 컨텐츠들(HTML, CSS, 스크립트 그리고 많은 이미지들...)을 모두 차례로 다운받고 모두 받은 후 화면을 그리는 것 보다는, 받는대로 계속 보여주는 것이 전체적인 속도도 빠를 뿐만 아니라 사용자 반응속도도 좋게 보입니다.


멀티태스킹을 하지 말아야 할 때

사람은 작업전환 속도가 매우 느립니다. 특히 개발자들은 작업전환을 굉장히 어려워할 뿐만 아니라 싫어합니다. 사람은 컴퓨터와 같지 않습니다. 그냥 한 번에 하나의 일을 하는 것이 좋습니다.
개발자가 몰입에 빠져 있을 때(flow) 그것을 깨지 마세요. 여러 사람이 개발자에게 이것 저것 요청하지 마세요. 개발자의 input은 팀 리더만으로 충분합니다.


멀티태스킹을 해야 할 때

소프트웨어 개발은 대략 "분석 -> 설계 -> 구현 -> 통합/테스트" 이런식으로 흘러갑니다. 모든 요구사항을 구현까지 완전히 마치고 테스트로 넘기면 테스터나 고객들 작업에서 병목이 생길 겁니다. 그 기간에 대부분의 개발자는 테스트 결과 받느라 손놓고 있을 경우가 많습니다. 그리고 테스트 결과 오면 이번에는 개발자가 굉장히 바빠집니다.

이 때 멀티태스킹을 해야 할 시점입니다. 모든 요구사항 완전히 끝내기 전 중간 중간 피드백을 받을 수 있도록 결과물을 테스터나 고객에게 넘기세요. 그렇습니다. 애자일에서 말하는 방법이죠 ^^
내가 다음 요구사항을 개발할 때 테스터나 고객을 이전 요구사항을 테스트 하거나 검토할 겁니다. 나중에 통합/테스트 작업에 큰 병목이 걸릴 염려도 줄어듭니다.

 
2 Comments
댓글쓰기 폼