자바 고급

고동현·2025년 1월 4일
0

JAVA

목록 보기
23/23

프로세스와 스레드

멀티태스킹

CPU코어가 1개라고 가정했을때, 프로그램 A의 코드를 0.01초 수행하고, 프로그램 B의 코드를 0.01초정도 수행
이걸 반복하면, 마치 영사기의 사진이 돌아가는 것처럼 동시에 수행되는 것처럼 보일 수 있음 (이걸 시분할기법이라함)
어떤 프로그램이 먼저, 얼만큼 실행되는지는 운영체제의 스케쥴링 기법에 따라 다름.

멀티 프로세싱

진짜 CPU에 코어가 2개가 있어서, 이전에는 하나의 코어가 2개의 프로그램을 동시에 수행했다면, 이제는 두개의 코어가 3개의 프로그램을 동시에 수행하는것.

요즘은 대부분 컴퓨터가 멀티 코어를 사용하므로, 멀티 프로세싱을 하면서 멀티 태스킹도 하는것이다.(왜냐하면 하나의 코어에서 0.01초 수행하고 또 다른 프로그램 0.01초 수행하니까)


프로그램은 단순히 디스크에 있는 파일 조각일 뿐이다.
이걸 더블클릭해서 메모리에 올려야 프로세스가 된다.
그럼 이 프로세스를 cpu가 코드를 main부터 한줄 한줄 실행하면서 프로세스가 실행되는것이다.

그림과 같이 프로세스를 실행하면,
코드: 프로그램코드
힙: 동적 할당 영역
기타: 데이터 섹션(전역변수 및 정적 변수)
등이 생기고

프로세스에는 최소 하나이상의 스레드가 존재한다.
왜냐하면, 스레드가 프로세스내에서 실행되는 작업의 단위이므로,최소한 하나의 스레드가 존재해야 프로그램이 실행될 수 있다.(그래야 최소한 main함수를 실행 시키니까)

정리하자면, 프로세스는 실행 환경과 자원을 제공하는 컨테이너 역할을 하는거고, 스레드는 CPU를 사용해서 직접 코드를 하나하나 실행하는 것이다.
프로세스 자체는 운영체제의 스케줄러에 의해 직접 실행되는것이 아니라, 프로세스 내의 스레드가 실행된다.

여기서 멀티스레드가 존재하는 이유는
하나의 프로그램에서도 동시에 여러작업이 필요하다.
워드 프로그램 - 프로세스 A

  • 스레드 1: 문서편집
  • 스레드 2: 자동 저장
  • 스레드 3: 맞춤법 검사

참고:
각 스레드는 프로세스의 코드 힙 기타 등등을 공유하지만, 각 스레드마다 개별 스택이 있다. 당연히 개별 스택이 존재해야하는 이유는 서로 다른 작업을 동시에 처리하기 위해서는 각각 독립적인 함수 호출 정보와 지역 변수를 관리해야 하기 때문이다.


여기에 있는 스레드 A1의 A1,A2,,,이건 스택이 아니다. 코드 1,2,3,4줄을 뜻하는것이다.
이렇게 코어가 1개 있으면 스레드 1의 A1수행하고 스레드 B1으로 가서 B1실행하고 프로세스를 돌아가면서 해당 스레드의 코드를 한줄 한줄 수행한다.

멀티코어에서도 동일하다.

profile
항상 Why?[왜썻는지] What?[이를 통해 무엇을 얻었는지 생각하겠습니다.]

0개의 댓글