백엔드 개발자라면 대답해야 할 100가지 질문

15. 스레드와 프로세스

ignuy 2023. 8. 31.

프로세스

일반적으로 디스크에 존재하는 “프로그램”을 실행시켜서 동작하게 만들면 하나의 “프로세스”가 프로그램의 인스턴스로 메모리에 올라간다. 이때 여러 프로그램을 실행시키는 것은 멀티 프로세스라고 한다. 우리가 컴퓨터를 하는데 보통 워드, 크롬, 웹엑스 등 여러 프로그램을 동시에 실행하는 것이 바로 멀티 프로세스이다.

하나의 프로세스는 내부에 논리적인 저장 공간으로 Code, Data, Stack, Heap 등의 자원과 여러 개의 스레드로 구성될 수 있다. 스레드는 프로세스의 자원을 이용해서 실제로 작업을 수행하는 역할을 한다. 따라서 모든 프로세스에는 최소한 하나의 스레드가 존재한다.

자바 JVM(Java Virtual Machine)은 주로 하나의 프로세스로 실행되며, 동시에 여러 작업을 진행하기 위해 멀티 스레드를 지원하고 있다.

스레드

위에서 언급한 것처럼 스레드는 프로세스의 자원을 이용해서 실제로 작업을 수행하는 역할을 한다. 자바에서는 JVM에 의해 관리된다. Main 스레드 하나로 시작하여 스레드를 추가 생성하게 되면 멀티 스레드 환경이 되고 이러한 스레드들은 프로세스의 리소스를 공유하기에 효율적이지만 여러 개의 스레드가 동시에 공유자원을 건드리게 되면 자연스럽게 잠재적인 문제점이 노출되게 된다.

따라서 잠재적인 위험성을 방지하기 위해서 접근하는 변수를 불변 변수로 선언하거나, 가변 변수일 경우 해당 값을 변경하는 연산을 @Synchronized 키워드를 이용해 한번에 하나의 스레드에서만 접근하게 하는 등 개발자가 의도적으로 막아두어야 한다.

댓글