오늘날의 컴퓨터에서 프로그램 동작 방식
프로그램이 컴퓨터에서 실행되면 그걸 프로세스라고 부른다
그 프로세스는 최소 한 개의 스레드를 가진다
스레드는 CPU 코어에서 실제로 실행되는 실행 단위다
오늘은 실제로 그러한지 맥북에서 테스트해보는 내용이다
맥북에서 테스트를 위한 프로그램 작성
C언어로 아주 간단한 프로그램을 아래처럼 작성했다
// 파일 이름 : hello.c
#include <stdio.h>
#include <unistd.h>
int main(void)
{
printf("Hello, world!\n"); // 화면에 출력
sleep(10); // 10초 sleep
return 0; // 정상적인 종료를 의미
}
이 코드 어디에서도 명시적으로 스레드를 만드는 코드는 없다
단지 프로그램을 실행하면 호출되는 main() 함수가 있을 뿐이다
위의 코드 파일 이름을 hello.c 라고 했을 때
이 프로그램이 컴퓨터에서 실행될 수 있게끔 아래의 명령어를 통해 컴파일 해주자
gcc hello.c -o hello
그러면 실행 가능한 프로그램이 파일 형태의 hello 라는 이름으로 생성된다
이제 hello 프로그램을 아래의 명령어로 실행해 보자
./hello
그러면 Hello, world! 를 출력하고 10초 동안 가만히 기다린 후에 프로그램이 종료된다
프로그램 종료 후의 터미널 창은 아래와 같다
이 프로그램이 실행 중일 때 스레드를 가지고 있을까?
이 실험을 하기 위해 ./hello 를 통해 프로그램이 실행되는 동안
다른 터미널 창을 하나 열고 아래의 명령어를 수행해 보자
이 명령어는 hello 라는 이름의 프로세스에 속한 스레드들 정보를 가져오는 명령어다
pgrep hello | xargs ps -M
이 명령어의 수행 결과는 아래와 같다
USER 이름만 편집해서 쉬운코드로 바꿨고 나머지는 터미널에서 캡처한 결과를 그대로 보여준다
이 결과를 통해 알 수 있는 것은
hello 프로그램이 실행되는 동안, 즉, 프로세스가 동작하는 동안
해당 프로세스에는 스레드도 하나가 있다는 것을 알 수 있다 (두 번째 라인이 해당 스레드 정보를 표현)
(참고로 hello 프로세스의 프로세스 ID는 18575 임을 알 수 있다)
정리하면
기본적으로 프로세스는 반드시 스레드를 하나 가진다
그래야만 한다
왜냐하면 오늘날 컴퓨터에서는 스레드가 CPU 코어에서 실제로 실행되는 실행 단위이기 때문이다
쉬운코드는 본질에 충실합니다
👉 " 프로세스와 스레드 차이 많이 헷갈려 하는 포인트 " 글 보러 가기
👉 macOS에서 pgrep, xargs, ps 명령어를 알고 싶다면?