코코아 Study_JAVA 프로세스&쓰레드 #2

VANS·2021년 11월 26일
0

스터디

목록 보기
2/15

21.11.26(금)


프로세스

1. 프로세스란?

- 컴퓨터가 어떤 일을 하고 있는 상태
  ex) 문서를 실행시키는 작업, 프로그램을 실행시키는 작업

2. 프로세스의 특징

- 동시적, 병렬적 또는 둘의 혼합으로 진행된다.
- 동시성은 프로세스 1개가 여러개의 작업을 조금씩 조금씩 번갈아가면서 하는것.
  (번갈아하는게 빨라서 동시로 진행되는것처럼 보임)
- 병렬성은 프로세스 1개에 다중 코어를 갖고 있어 각각의 작업을 동시에 진행하는 것.
- 프로세스는 컴퓨터의 자원(메모리,cpu)을 분할해서 쓴다.

쓰레드

1. 쓰레드란?

- 한 프로세스 내에서도 여러 갈래의 작업들이 동시에 진행되어야 함 이 갈래를 쓰레드라고 부른다.
  ex) 한 식당에서 한 요리사가 스테이크, 파스타, 햄버거 3개의 메뉴를 내놓는다고 할때 스테이크, 
  파스타, 햄버거는 각각 1개의 프로세스들로 볼 수 있고 햄버거 조리대 안에서 
  1.패티 굽기 2.빵에 상추올리기 3.소스 뿌리기 등을 각각 1개의 스레드로 볼 수 있다.

2. 쓰레드의 특징

- 쓰레드는 프로세스에 할당된 자원을 분할해서 쓴다.
- 프로세스안의 공유되는 1개 변수에 서로 다른 2개의 쓰레드가 접근하면 에러가 된다.
  ex) 버튼 1개를 1번 누를때 +1이 되는 프로세스를 쓰레드 2개가 접근하여 10번 누른다고 하면 
  +20이 되는게 아니라 20보다 작은 수가됨(중복)
- 쓰레드 갯수에 따라 싱글 쓰레드 프로세스, 멀티 쓰레드 프로세스로 나뉜다.

3. 멀티 쓰레드의 장단점

- 시스템 자원을 보다 효율적으로 사용할 수 있다.
- 사용자에 대한 응답성이 향상된다.
- 작업이 분리되어 코드가 간결해진다.

- 변수를 공유하기 때문에 동기화에 주의해야한다.
- 교착상태가 발생하지 않도록 주의해야한다.
- 특정 쓰레드가 작업할 기회를 놓치는 기아 현상이 발생할 수도 있다.
  (각 쓰레드가 효율적으로 고르게 실행될 수 있도록 해야 한다.) 
  

4. 쓰레드의 구현

1) Thread 클래스를 구현

class MyThread extends Thread {
	public void run(){  //Thread 클래스의 run()을 오버라이딩
    	//작업내용
    }
}
MyTread t1 = new MyTread(); //쓰레드의 생성
t1.start(); //쓰레드의 실행

2) Runnable 인터페이스를 구현(다른 클래스를 상속 받고 싶을때)

class MyThread2 extends (...) implements Runnable {
	public void run(){  //Runnable 인터페이스의 추상 메소드 run()을 구현
    	//작업내용
    }
}
Runnable r = new MyThread2();
Thread r2 = new Thread(r); // Thread(Runnable r)
=> Thread t2 = new Thread(new MyThread2()); 

t2.start();
profile
코딩도 점진적 과부화

0개의 댓글