All Honey Tip

[기술 면접] 4. Thread가 무엇인가요?

Thread가 무엇인가요?

이전 시간에 이어서, Thread에 대해 알아보겠습니다. Thread는 Process와 같이 자주 등장하는 개념이며, 상대적으로 더욱 깊은 내용들이 있다고 할 수 있습니다. Process / Multi-Process / Thread / Multi-Thread 모두 핵심 개념이니, 이번 시간을 통해 자세히 배울 수 있으시길 바랍니다.

image 31




Q: Thread가 무엇인가요?

한 process 내에서 실행되는 동작(기능 function)의 단위입니다. 각 Thread는 속해있는 process의 Stack 메모리를 제외한 나머지 Memory 영역인 Code, Data, Heap을 공유할 수 있습니다.

Thread는 process 내에서 독립적인 기능을 수행합니다. 독립적인 기능을 수행한다는 것은 독립적으로 함수를 호출함을 의미합니다.






Q: Thread는 왜 독립적인 Stack Memory 영역이 필요한가요?

Stack 영역은 함수 호출 시 전달되는 인자, 함수의 Return Address, 함수 내 지역변수 등이 저장되며 각 thread가 함수 호출 시 각각의 Stack memory를 사용합니다.



Q: Multi thread는 무엇인가요?

하나의 process가 동시에 여러개의 일을 수행할 수 있도록 해주는 것입니다. 즉, 하나의 process(실행된 하나의 program)에서 여러 작업을 병렬로 처리하기 위한 단위입니다.



Q: Process와 Thread를 비교하여 설명해주세요.

process는 운영체제로부터 자원을 할당받는 작업의 단위이고, thread는 process가 할당받은 자원을 이용하는 실행의 단위입니다. 즉, process는 실행파일이 memory에 적재되어 CPU를 할당받아 실행되는 것입니다.

Thread는 한 process 내에서 실행되는 동작의 단위이며, stack 영역을 제외한 code, data, heap 영역을 공유합니다.







Q: Multi process와 Multi thread를 비교하여 설명해주세요.

  • Multi thread는 Multi process보다 적은 메모리 공간을 차지하고, Context Switching이 빠릅니다.
  • Multi process는 Multi thread보다 많은 메모리공간과 CPU 시간을 차지합니다.
  • Multi thread는 동기화 문제와 하나의 thread 장애로 전체 thread가 종료될 위험이 있습니다.
  • Multi process는 하나의 process에 문제가 발생해도 다른 process에 영향을 주지 않아, 안정성이 높습니다. 즉, 메모리 구분이 필요한 경우 Multi process가 권장됩니다.
  • Context Switching이 자주 일어나고, 데이터 공유가 빈번한 경우, 그리고 자원을 효율적으로 사용해야 되는 경우 Multi thread가 유리합니다.
Multi ProcessMulti Thread
메모리 사용
CPU 시간
많음적음
Context
Switching
느림빠름
안전성높음낮음





Q: Multi thread가 Multi process보다 좋은 점은 무엇인가요?

Multi process를 이용하던 작업을 Multi thread로 구현할 경우, 메모리 공간과 시스템 자원 소모가 줄어들게 됩니다. 또한 process를 생성하고 자원을 할당하는 등의 system call을 생략할 수 있기 때문에, 자원을 효율적으로 관리할 수 있습니다. 뿐만 아니라 Context swtiching 시 캐시 메모리를 초기화할 필요가 없어서 속도가 빠릅니다.

데이터를 주고 받을 때를 비교해 보면, process 간의 통신(IPC)보다 Multi thread 간의 통신 비용이 적기 때문에, 오버헤드가 적습니다.






Q: Multi process환경에서 process 간에 데이터를 어떻게 주고 받을까요?

원칙적으로 process는 독립적 주소 공간을 가지며, 다른 process의 주소 공간을 참조할 수 없습니다. 하지만, 경우에 따라 운영체제는 process 간의 자원 접근을 위한 매커니즘인 프로세스 간 통신(IPC) 을 제공합니다. – pipe, socket, 공유 메모리








Q: IPC(Inter-Process Communication)가 무엇인가요?

process는 각각의 독립적 주소를 가지는데, 다른 process가 이 주소공간을 참조하는 것은 허용하지 않습니다. 그렇기 때문에 다른 process와 데이터를 주고받을 수 없습니다. 이를 해결하고자 운영체제는 IPC기법을 통해 process들 간에 통신을 가능하게 합니다.

process간 통신(IPC)에는 기본적으로 공유메모리(shared memory)와 메시지 전달(message passing)의 두 가지 모델이 있습니다.







Q: IPC의 예시를 들어주실 수 있나요?

IPC는 크게 공유 메모리 모델 메시지 전달 모델로 나눌 수 있습니다. 공유 메모리 모델은 주소 공간의 일부를 공유하며 공유한 메모리 영역에 read/write를 통해 통신하게 되는데, 예시로는 공유메모리와 POSIX가 있습니다. 메시지 전송 모델의 경우, kernel을 통해 send/receive 연산으로 데이터를 전송합니다. 예시로는 pipe, socket, message queue등이 있습니다.

  • 공유 메모리(shared memory) : process들이 주소 공간의 일부를 공유합니다. 공유한 메모리 영역에 읽기/쓰기를 통해서 통신을 수행합니다. process가 공유 메모리할당을 kernel에 요청하면, kernel은 해당 process에 메모리 공간을 할당해줍니다. 공유 메모리 영역이 구축된 이후에는 모든 접근이 일반적인 메모리 접근으로 취급되기 때문에 더 이상 kernel의 도움 없이도 각 process들이 메모리 영역에 접근할 수 있습니다. 따라서 kernel의 관여 없이 데이터 통신을 할 수 있기 때문에, IPC속도가 빠르다는 장점이 있습니다.
    공유 메모리 방식은 process 간의 통신을 수월하게 만들지만, 동시에 같은 메모리 위치에 접근하게 되면 일관성 문제가 발생할 수 있습니다. 이에 대해서는 kernel이 관여하지 않기 때문에 process들 끼리 직접 공유 메모리 접근에 대한 동기화 문제를 책임져야 합니다.
  • 메시지 전달(message passing) : 통상 system call을 사용하여 구현됩니다. kernel을 통해 send(message) receive(message)라는 두 가지 연산을 제공받습니다. 예를 들면, process1이 kernel로 message를 보내면, kernel이 process2에게 message를 보내주는 방식으로 작동합니다.
    메모리 공유보다는 속도가 느리지만, 충동을 회피할 필요가 없기때문에 적은 양의 데이터를 교환하는 데 유용합니다. 또, 구현하기 쉽다는 장점이 있습니다. – pipe, socket, message queue







Q: Multi thread가 Multi process보다 안 좋은 점은 무엇인가요?

thread 간의 자원 공유 시 동기화문제가 발생할 수 있어서, 프로그램 설계 시 주의가 필요하고, 하나의 thread에 문제가 생기면, process 내의 다른 thread에도 문제가 생길 수 있습니다.






Q: 멀티 스레딩과 멀티 태스킹의 공통점과 차이점은 무엇인가요?

  • 공통점 : 짧은 간격을 두고 여러 개의 프로세스를 번갈아 실행시킴으로써(시분할), 동시에 여러 개의 프로세스가 실행되는 것처럼 보입니다.
  • 차이점 : 멀티 스레딩은 개발자가 직접 구현하고 자원을 공유하며, 하나의 프로그램 단위입니다. 하지만, 멀티 태스킹은 OS에서 지원하는 것으로 독립된 메모리를 가지며, 여러 개의 프로그램을 실행시킵니다.
    • 자원 공유를 위해선 별도의 IPC(Inter Process Communication)를 구현해야 하며, 멀티 스레딩에 비해 OS에 부담이 큽니다.







Q: 공유 메모리와 메시지 전달 모델의 장단점을 설명해주세요.

공유 메모리 모델은 초기 공유 메모리 할당을 제외하면, kernel 관여 없이 통신을 유지할 수 있기 때문에 빠른 속도를 자랑합니다. 하지만, process가 동시에 메모리에 접근하기 때문에, 동기화 과정을 구현해야 한다는 단점이 있습니다.

메시지 전달 모델은 kernel을 통해 데이터를 주고 받기 때문에, 통신 속도가 느리다는 단점이 있습니다. 하지만, kernel의 제어로 동기화 문제를 신경쓰지 않아도 됩니다.



마치며

이번 시간에는 Thread를 중심으로, 비교되는 항목들과 관련 개념들을 다양하게 알아보았습니다. 내용이 방대하여, 한 번에 암기할 순 없을 것으로 생각합니다. 부담이 된다면, 흐름을 이해한다는 생각으로 넘어가고 나중에 다시 공부해보신다면 더욱 유익한 시간이 되실겁니다.

다음 시간에는, 임계영역에 대한 개념들을 알아보겠습니다.

4. Thread가 무엇인가요?


코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다