컴퓨터를 키고 프로그램을 실행시키면 운영체제가 프로세스를 만들어준다. 이 프로세스가 프로그램을 돌리기 위한 자원을 분배하게 된다. 이때 중요한 것이 메모리로 프로그램 별로 메모리를 할당해주는 과정을 운영체제가 담당하게 된다.
그래서 작업관리자를 실행시키면 메모리를 프로그램별로 얼마나 할당해 주었는지 확인할 수 있다.스레드 : 프로그램을 실행시키는 가장 작은 단위로 스케쥴러에 의해 독립적으로 관리된다. 각 프로세스 별로 적어도 하나의 스레드에서 여러개의 스레드를 가질 수 있다. 그래서 프로세스가 두 개이상의 스레드를 가지면 mulit-threaded process라고 부른다.
그림을 보다 싶이 하나의 프로세스를 보면 하나의 스레드에서 수십개의 스레드가 존재할 수 있다. 그리고 리소스(메모리)도 함께 프로세스 안에 들어가 있게 된다.
그래서 프로세스가 여러개인것과 멑리 스레드가 프로세스에 존재하는 것은 다른 개념이다.
그래서 왼쪽 그림을 보면 멀티태스킹이고 오른쪽 그림은 멀티스레딩을 이야기 한다.
자바에서는 thread를 class로 만들어 놓았기에 이것을 상속받거나 interface runnable을 받아오는 방법이 존재한다.
class MyThread extends Thread {
public void run() { // overriding
/* tasks to run on a thread */
}
}
class MyThread implements Runnable {
public void run() {
/* tasks to run on a thread */
}
}
Thread 클래스나 Runnable abstract 클래스를 받아오면 위와 같이 run이라는 함수가 생기게 된다. 바로 여기에 우리가 원하는 업무들을 작성해야 한다.