🎁 프로세스(Process)와 스레드(Thread)의 정의

  • 프로세스와 스레드는 자칫 같은 의미로 생각하기 쉬운 개념입니다. 하지만 두 개념은 실행 범위와 목적에서 차이가 존재합니다.

  • 프로세스란 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램이며, 스레드란 프로세스 내에서 실행되는 여러 흐름의 단위인 것이죠.



🎁 프로세스 / 스레드는 어떻게 접하게 될까?

  • 컴퓨터의 작업관리자를 실행하면 무수히 많은 프로셋가 실행되고 있는 모습을 볼 수 있습니다. 컴퓨터 작업을 하는 동안 프로세스, 스레드와 항상 함께하고 있다고 해도 과언이 아닙니다. 빠르고 안정적인 프로그램을 만들기 위해서는 프로세스와 스레드가 효율적으로, 오류 없이 일을 처리해야 합니다. 따라서 개발자가 프로그래밍을 할 경우에는 자신이 구현하는 코드가 프로세스 단위에서 실행되어야 하는지, 스레드 단위에서 실행되어야 하는지 구분하고 코드의 동작 방식을 정확히 이해할 필요가 있습니다.


이 부분은 현업 개발자 분의 조언을 받아 작성했습니다.

🎁 더 알아보기

📝 스레드와 멀티 스레드가 무엇인지

  • 우선 스레드는 프로그램이 실행하는 작업의 단위라고 생각하시면 됩니다. 쉽게 말해서 프로그램이 사용하는 손? 팔? 이라고 생각하시면 편합니다.

  • 예를 들어서 스프링으로 이메일을 보내고 루트 주소 (/) 로 이동한다고 가정해보겠습니다. 사용자가 "이메일 인증" 버튼을 누르면 이메일이 날아가는 로직입니다. 만약 이 모든 과정이 싱글스레드로 동작한다면 사용자가 "이메일 인증" 버튼을 누르는 순간 이메일을 보내는 로직이 실행이 될 것이고 스프링은 이메일을 보내고 있는 중이기 때문에 이메일이 도착하기 전까지 아무것도 할 수 없습니다. 이는 이메일을 보내고 루트 주소로 이동하는 일련의 과정이 하나의 스레드에서 실행되기 때문에 벌어지는 일입니다.

  • 이 상황이 멀티 스레드인 경우를 생각해보겠습니다. 사용자가 "이메일 인증" 버튼을 누르는 순간 이메일을 보내는 로직을 실행하는 스레드가 할당되고 여분의 스레드가 있기 때문에 루트 주소로 이동하는 것을 이메일이 전송됐는지 여부와 관계없이 실행할 수 있습니다.

  • 각각의 로직들을 스레드라는 팔을 이용해서 작업을 수행하는 것인데 만약 싱글스레드 (팔이 하나인 경우) 에는 작업을 한번에 하나밖에 못하겠죠? 하지만 멀티스레드 (팔이 여러개인 경우) 에는 한번에 여러가지 일을 처리할 것입니다.


📝 프로그램과 프로세스의 차이

  • 프로그램은 우리가 만드는 프로젝트 그 자체입니다. 예를 들어서 우리가 스프링 프로젝트를 만들었다면 그 프로젝트 자체가 프로그램이 되는 것이죠. 프로세스는 프로그램 안에서 실행되는 다양한 수행작업들입니다.

  • 예를 들어서 스프링 프로젝트 (프로그램) 안에서 이메일을 보내고 사용자를 인증하는 로직 (프로세스) 을 수행하는 것입니다.


📝 스레드와 프로세스의 차이

  • 프로세스는 앞서 설명드렸듯이 프로그램에서 실행되는 작업의 단위이고 스레드는 프로세스 안에서 실행되는 흐름의 단위입니다.

  • 이 둘의 차이는 프로세스는 고유한 주소와 메모리 공간이 부여되어 있고 독립적입니다. 반면에 스레드는 부모 프로세스에서 자원을 공유하기 때문에 논리적으로 연결되어 있습니다. 즉, 스레드는 프로세스 안에 포함된 개념이며 경량화된 프로세스라고 볼 수 있습니다.

profile
나 혼자 보려고 만든 개발 일기

0개의 댓글