프로세스와 쓰레드 -1

Bloooooooooooooog..·2023년 2월 25일
1
post-thumbnail

갑자기 자바 공부.. 학원 진도에서 딱히 중요하게 배우지 않았거나 까먹었던 부분, 람다식 스트림, 쓰레드 등등도 따로 공부해야 할 것 같아서 주말에 시간을 내서 공부하기로 한다. 🏫

어차피 프로그래머는 평생 공부해야할 것!

프로세스와 쓰레드

  1. 프로세스 : 실행 중인 프로그램 (자원 + 쓰레드)

  2. 쓰레드 : 프로세스 내 실제 작업을 수행 -> 모든 프로세스는 최소한 하나의 쓰레드를 갖고 있다.

프로세스 == 공장 , 쓰레드 == 일꾼

싱글 쓰레드 프로세스 2개 < 멀티 쓰레드 프로세스 (프로세스1개에 쓰레드2)

공장에 한 명의 일꾼만 두는 채로 공장을 늘리는 것보다
공장에 일꾼을 늘리는 것이 적은 비용이 든다. (멀티 쓰레드 방식)
JAVA의 경우 멀티쓰레드를 지원한다.

멀티쓰레드의 장단점

멀티 쓰레드가 무조건 장점만 있지는 않다

장점단점
1. 시스템 자원의 효율적 사용1. 동기화에 주의 요함
2. 사용자에 대한 응답성 향상2. 교착상태가 발생하지 않게 주의 요함
3. 작업이 분리되어 코드가 간결3. 각 쓰레드가 효율적으로 고르게 실행될 수 있게 해야한다.

쓰레드의 구현과 실행

1. Thread클래스 상속해 구현

class JavaThread extends Thread {
	public void run(){ 
    	// 작업 내용
    }
}

2. Runable인터페이스 구현

class JavaThread2 implements Runable {
	public void run(){
    	// 작업내용
    }   
}

싱글 쓰레드와 멀티 쓰레드의 예시

싱글 쓰레드

class Ex {
	public void main(String[] args){
    	
        for(int i = 0; i < 100; i++){
        	System.out.print(0);
        }
        
       	for(int i = 0; i < 100; i++){
        	System.out.print(1);
        }
    }
}

이때 위의 for문이 실행이 되고 끝난 후에 뒤에 있는 for문이 실행된다. 두 개의 프로세스는 각각 독립되어 섞이지 않는다.

0이 100개 출력된 후 1이 100개 출력된다.

멀티 쓰레드

class Ex {
	public void main(String[] args){
    	Ex_1 t1 = new Ex_1(); // thread클래스 상속 방식 쓰레드 객체 생성
        Runable r = new Ex_2(); 
		Thread t2 = new Thread(r);  // Runable 구현 방식의 쓰레드 객체 생성
        t1.start(); 
        t2.start(); // 멀티쓰레드 방식으로 한 프로세스 내에 2개의 쓰레드
    }

class Ex_1 extends Thread{ // thread 클래스 상속
	public void run(){
    	for(int i=0; i< 100; i++){
        	System.out.print(0);
        }
    }
}
class Ex_2 implements Runable{ // runable 인터페이스 구현
	public void run(){
    	for(int i=0; i< 100; i++){
        	System.out.print(1);
        }
	}
}

이와 같은 멀티 쓰레드 방식은 1과 0이 섞여서 실행된다
이는 OS의 스케쥴러의 결정을 따른다.

profile
공부와 일상

0개의 댓글