Background: processes and threads

컴퓨터를 키고 프로그램을 실행시키면 운영체제가 프로세스를 만들어준다. 이 프로세스가 프로그램을 돌리기 위한 자원을 분배하게 된다. 이때 중요한 것이 메모리로 프로그램 별로 메모리를 할당해주는 과정을 운영체제가 담당하게 된다.

https://images.velog.io/images/tonyhan18/post/8c586905-4e14-4cff-997d-866da6b5dce5/image.png

그래서 작업관리자를 실행시키면 메모리를 프로그램별로 얼마나 할당해 주었는지 확인할 수 있다.스레드 : 프로그램을 실행시키는 가장 작은 단위로 스케쥴러에 의해 독립적으로 관리된다. 각 프로세스 별로 적어도 하나의 스레드에서 여러개의 스레드를 가질 수 있다. 그래서 프로세스가 두 개이상의 스레드를 가지면 mulit-threaded process라고 부른다.

https://images.velog.io/images/tonyhan18/post/1b1f4340-7d2a-4d34-b826-be1d90d35c68/image.png

그림을 보다 싶이 하나의 프로세스를 보면 하나의 스레드에서 수십개의 스레드가 존재할 수 있다. 그리고 리소스(메모리)도 함께 프로세스 안에 들어가 있게 된다.

그래서 프로세스가 여러개인것과 멑리 스레드가 프로세스에 존재하는 것은 다른 개념이다.

Background: multitasking vs. multithreading

https://images.velog.io/images/tonyhan18/post/e5512ccd-880e-45e4-ba34-755ab2bef79e/image.png

그래서 왼쪽 그림을 보면 멀티태스킹이고 오른쪽 그림은 멀티스레딩을 이야기 한다.

Background: multithreading

Implementing threads in Java

자바에서는 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이라는 함수가 생기게 된다. 바로 여기에 우리가 원하는 업무들을 작성해야 한다.

Implementing threads in Java: Example