개발

프로세스와 스레드

Dev Aaron 2020. 11. 8. 22:09
반응형

CS를 전공하게 되면 보통 2-3학년 쯤 “운영체제” 혹은 “리눅스 커널” 관련한 과목을 이수하게 됩니다. 그때 프로세스와 스레드에 대한 개념을 배우게 되며, 저 역시 그런 과정을 거쳤습니다.

프로세스와 스레드는 면접에서 단골 질문으로 등장합니다. 하지만 막상 질문을 받으면 뭐라고 얘기할지 말이 잘 안 떨어지기도 하죠. 실무에서 멀티 스레드 프로그래밍을 작성하며 개발을 하고 있지만, 정작 위와 이를 설명해보라는 질문을 받으면 명쾌하게 답변이 잘 안나오더군요.

그래서 한 번 정리를 다시 할 필요가 있어 포스팅을 작성하게 되었습니다. 전공 수업때 공부했던 수준으로 디테일하게, 프로세스 시분할 방식까지 언급하지는 않습니다.

프로세스

개발자가 작성한 프로그램 코드가 운영 체제 위에서 실행될 때 이것을 하나의 프로세스라고 합니다.

  • 운영체제로부터 CPU 시간, 메모리 등의 자원을 할당받아 프로그램을 수행합니다.
  • 각 프로세스는 독립적인 메모리 영역을 할당 받습니다.
  • 그렇기 때문에 프로세스들은 독립적으로 구분되어 있으며, 서로 통신하기 위해서는 IPC를 사용해야 합니다.

스레드

스레드는 프로세스 내에 존재하는 실행 흐름의 단위입니다.

  • 하나의 프로세스에 여러 스레드가 존재할 수 있으며 다양한 작업을 수행하게 됩니다.
  • 프로세스 내에 존재하기 때문에 프로세스의 일부 자원을 공유합니다.
  • 따라서 프로세스 간 통신 (IPC)에 비해 통신 비용이 적습니다.
  • 하지만 그에 따른 동기화 이슈가 있습니다.
  • 프로세스 간 전환보다 스레드 간 전환 비용이 훨씬 적습니다.

References

반응형