더북(TheBook)


2.1멀티프로세스와 멀티스레드


단일 코어 CPU에서 여러 개의 실행 흐름이 동시에 필요하다고 가정해 보겠습니다. 예를 들어 대용량 데이터를 분석하는 프로그램을 만들고 있다고 가정해 보죠. 필요한 모든 데이터를 네트워크에서 전송받아 사용자의 명령(버튼 클릭이나 키보드 입력 등)을 실행하면 아마도 사용자는 프로그램이 멈췄다고 생각할 것입니다. 이때 UI를 담당하는 실행 흐름에서는 사용자가 현재까지 읽어 들인 데이터를 가지고 분석 및 시각화할 수 있도록 명령을 받습니다. 프로그램 화면에는 모든 데이터를 받았는지를 표시등을 이용해 시각적으로 보여 줍니다.

다른 실행 흐름에서는 메모리의 힙 영역을 충분히 확보해 놓은 뒤 네트워크에서 데이터를 계속 수신해 저장합니다. 나머지 하나의 실행 흐름에서는 지금까지 받은 데이터를 이용해 사용자의 명령을 수행합니다.

UI 담당 실행 흐름과 네트워크 수신 실행 흐름에서는 데이터 수신 완료 여부를 나타내는 데이터(참과 거짓을 나타내는 불리언 타입)를 서로 공유해야 합니다. 왜냐하면 네트워크 수신 실행 흐름에서 데이터 수신을 완료했을 때 UI 담당 실행 흐름에서는 프로그램 화면의 데이터 수신 완료 표시등에 표시를 해야 하기 때문입니다.

또한 네트워크 수신 실행 흐름과 데이터 분석 실행 흐름에서는 지금까지 받은 데이터(메모리의 힙 영역에 저장된 데이터)를 공유해야 합니다. 그래야 데이터를 이용해 사용자의 명령을 즉각적으로 수행할 수 있기 때문입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.