Process ์ Thread
Process
โ ํ๋ก์ธ์ค๋?
์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ์ธ์คํด์ค๋ฅผ ์๋ฏธํจ.
์ด์์ฒด์ ์์ ํ๋์ ๋ ๋ฆฝ์ ์ธ ์์ ๋จ์๋ก ๊ด๋ฆฌ๋จ.
๊ฐ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ (์ฝ๋, ๋ฐ์ดํฐ, ํ, ์คํ) ์ ๊ฐ์ง.
CPU ์ค์ผ์ค๋ง์ ๋ฐ์ ์คํ๋จ.
โ ํ๋ก์ธ์ค์ ํน์ง
๋ ๋ฆฝ๋ ์คํ ํ๊ฒฝ
๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ์ง ์์.
ํ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ ์ ์์.
๋ฉํฐ ํ๋ก์ธ์ค ์ง์
ํ๋์ ํ๋ก๊ทธ๋จ์ด ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์๋ก ์คํ๋ ์ ์์.
๊ฐ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ๋ฉฐ, ๋ณ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฌ์ฉํจ.
์ปจํ ์คํธ ์ค์์นญ ํ์
ํ๋ก์ธ์ค ๊ฐ ์ ํ ์ OS ๊ฐ ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค ์ํ๋ฅผ ์ ์ฅํ๊ณ , ์๋ก์ด ํ๋ก์ธ์ค์ ์ํ๋ฅผ ๋ณต์ํ๋ ๊ณผ์ ์ด ํ์ํจ.
์ปจํ ์คํธ ์ค์์นญ ๋น์ฉ์ด ํฌ๊ธฐ ๋๋ฌธ์ ํ๋ก์ธ์ค ๊ฐ ์ ํ์ ๋น๊ต์ ๋๋ฆผ.
IPC(Inter-Process Communication, ํ๋ก์ธ์ค ๊ฐ ํต์ ) ํ์
ํ๋ก์ธ์ค๋ ์๋ก ๋ ๋ฆฝ์ ์ด๋ฏ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ ค๋ฉด, ํ์ดํ, ๋ฉ์์ง, ํ, ๊ณต์ ๋ฉ๋ชจ๋ฆฌ, ์์ผ ๊ฐ์ ๋ฐฉ๋ฒ์ด ํ์ํจ.
Thread
โ ์ฐ๋ ๋๋?
ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ ๊ฐ์ฅ ์์ ๋จ์
ํ๋์ ํ๋ก์ธ์ค๋ ์ฌ๋ฌ ๊ฐ์ ์ฐ๋ ๋๋ฅผ ๊ฐ์ง ์ ์์.
๊ฐ์ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ(์ฝ๋, ๋ฐ์ดํฐ, ํ) ์ ๊ณต์ ํ์ง๋ง, ๊ฐ ์ฐ๋ ๋๋ ๋ ๋ฆฝ์ ์ธ ์คํ๊ณผ ๋ ์ง์คํฐ๋ฅผ ๊ฐ์ง.
โ ์ฐ๋ ๋์ ํน์ง
๊ฒฝ๋(Lightweight) ํ๋ก์ธ์ค
ํ๋ก์ธ์ค๋ณด๋ค ์ ์ ์์์ ์ฌ์ฉํจ.
ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ๊ฒ๋ณด๋ค ์ฐ๋ ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๋น์ฉ์ด ์ ์.
๋ฉ๋ชจ๋ฆฌ ๊ณต์
๊ฐ์ ํ๋ก์ธ์ค ๋ด์ ์ฐ๋ ๋๋ ๋์ผํ ํ๊ณผ ๋ฐ์ดํฐ ์์ญ์ ๊ณต์ ํจ.
๋ฐ๋ผ์ ์ฐ๋ ๋ ๊ฐ ๋ฐ์ดํฐ ๊ณต์ ๊ฐ ์ฌ์.
ํ์ง๋ง, ๋๊ธฐํ ์ด์(๋ ์ด์ค ์ปจ๋์ , ๋ฐ๋๋ฝ ๋ฑ) ๊ฐ ๋ฐ์ํ ์ ์์.
๋น ๋ฅธ ์ปจํ ์คํธ ์ค์์นญ
์ฐ๋ ๋๋ ๊ฐ์ ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ฏ๋ก ํ๋ก์ธ์ค ๊ฐ ์ ํ๋ณด๋ค ๋น ๋ฅด๊ฒ ์คํ ๊ฐ๋ฅ.
๋ฉํฐ์ฐ๋ ๋ฉ ์ง์
ํ๋์ ํ๋ก์ธ์ค์์ ์ฌ๋ฌ ๊ฐ์ ์ฐ๋ ๋๋ฅผ ๋์์ ์คํํ์ฌ ๋ฉํฐํ์คํน์ ๊ฐ๋ฅํ๊ฒ ํจ.
๋ค๋ง, ๋ฉํฐ ์ฐ๋ ๋ฉ ํ๊ฒฝ์์๋ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋์ -> Mutex(๋ฎคํ ์ค), Semaphore(์ธ๋งํฌ์ด), Lock ๋ฑ์ ์ด์ฉํ ๋๊ธฐํ๊ฐ ํ์ํจ.
ํ๋ก์ธ์ค์ ์ฐ๋ ๋ ๋์ ๋ฐฉ์
1. ํ๋ก์ธ์ค ์์ฑ ๋ฐฉ์
์ด์์ฒด์ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ๋ํ์ ์ธ ๋ฐฉ๋ฒ์ fork()
์์คํ
์ฝ์ ์ด์ฉํ๋ ๊ฒ์.
#include <stdio.h>
#include <unistd.h>
int main() {
printf("Before fork\n");
pid_t pid = fork(); // ์๋ก์ด ํ๋ก์ธ์ค ์์ฑ
if(pid == 0){
printf("Child Process: PID = %d\n", getpid());
} else {
printf("Parent Process: PID = %d\n", getpid());
}
return 0;
}
โ fork()
๋ฅผ ํธ์ถํ๋ฉด ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์๋ก์ด ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ค.
โ ๋ถ๋ชจ์ ์์ ํ๋ก์ธ์ค๋ ์๋ก ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ง๋ฏ๋ก ๋
๋ฆฝ์ ์ผ๋ก ์คํ๋จ.
2. ์ฐ๋ ๋ ์์ฑ ๋ฐฉ์(C, POSIX Threads)
๋ฉํฐ์ฐ๋ ๋ฉ์ ๊ตฌํํ ๋ pthread
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
#include <stdio.h>
#include <pthread.h>
void *thread_function(void *arg) {
printf("Hello from thread!\n");
return NULL;
}
int main(){
pthread_t thread;
pthread_create(&thread, NULL, thread_function. NULL);
pthread_join(thread, NULL);
printf("Main thread finished.\n");
return 0;
}
pthread_create()
๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ์ฐ๋ ๋๋ฅผ ์์ฑํจ.
pthread_join()
์ ์ฌ์ฉํ์ฌ ์์ฑ๋ ์ฐ๋ ๋๊ฐ ์ข
๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆผ.
Last updated
Was this helpful?