CS/ETC.

프로세스(Process)와 스레드(Thread)

prden 2021. 6. 22. 20:34

1. 프로세스

 1) 의미 :

프로세스란 실행 중인 프로그램을 의미하며 자원(메모리, CPU)과 스레드로 구성

하나의 새로운 프로세스를 생성하는 것 보다 하나의 새로운 스레드를 생성하는 것이 더 적은 비용이 든다. 

2. 스레드

1) 의미 : 

프로세스 내에서 실제 작업을 수행하는 것을 스레드라고 하며, 모든 프로세스는 하나의 스레드를 가지고 있다. 

 

2) 멀티 스레드  : 자원 + 스레드 + 스레드 + 스레드...(싱글 스레드 = 스레드가 하나인 경우)

멀티 태스킹 : 여러 개의 프로세스가 동시에 실행될 수 있는 것

  • 멀티 스레드 장점 :
    • 시스템 자원을 보다 효율적으로 사용할 수 있다.
    • 사용자에 대한 응답성이 향상된다(파일 전송되면서 채팅도 가능)
    • 작업이 분리되어 코드가 간결해진다. 
  •  멀티 쓰레드 단점 :
    • 동기화에 주의해야 한다.
    • 교착상태(dead-lock)가 발생하지 않도록 주의해야(어느 자원 필요로 하는 곳에서 제 때 못 가져가면 교착상태 발생)
    • 각 스레드가 효율적으로 고르게 실행될 수 있게 해야 한다. (기아상태 발생하지 않도록)

3) 쓰레드 구현과 실행

  •  Thread 클래스 상속 - java는 단일 상속만 허용하니까 인터페이스 사용하는 것이 더 낫다.
  •  Runnable 인터페이스를 구현 - run 안에 스레드가 작업할 내용 넣어주면 된다.
    public interface Runnable{
    	public abstract void rus();
        }
        
    class ThreadEx implements Runnable{
    	public void run(){
        for(int i=0; i<5; i++){
        	System.out.println(Thread.currentThread().getName());
            }
            
    Runnable r = new ThreadEx();
    Thread t1 = new Thread(r);
    
    //위 두줄을 합치면
    Thread t1 = new Thread(new ThreadEx());
    
    //쓰레드를 실행하기 위해서는 start()를 호출해야 한다. 
    	
        t1.start();
        t2.start();
        //쓰레드의 실행순서는 OS의 스케줄러가 작성한 스케쥴에 의해 결정된다.
        
    // run()이 아닌 start()를 호출하는 이유는 run()은 생성된 쓰레드를 실행시키는 것이 아니고 
    // 단순히 클래스에 선언된 메서드를 호출하는 것이다.

 모든 쓰레드는 독립적인 작업을 실행하는데 필요한 호출스택을 생성한 다음 runs()을 호출해서 생성된 호출스택에 run()이 첫 번재로 올라가게 한다. 

 1) main 메서드는 쓰레드의 start()를 호출하고 -> start()는 새로운 쓰레드를 생성하고, 쓰레드가 작업하는데 사용될 호출스택을 생성한다. -> 3) 새로 생성된 호출스택에 run()이 호출되어 쓰레드가 독립된 공간에서 작업을 수행한다. -> 4) 호출스택이 2개이므로 스캐줄러가 정한 순서에 의해 번갈아 가면서 실행된다. 

* main 메서드를 실행시키는 게 main 쓰레드이다. 쓰레드에는 사용자 쓰레드와 데몬 쓰레드 두 종류가있다. 

 

3. 싱글쓰레드와 멀티쓰레드

싱글쓰레드 : 하나의 쓰레드로 두개의 작업을 수행하는 경우 한 작업을 마친 후에 다른 작업을 시작

멀티쓰레드 : 두개의 쓰레드로 두 개의 작업을 수행할 경우 두 작업을 동시에 진행

이 때 두개의 작업을 완료하는데 시간은 멀티쓰레드의 경우 더 많이 걸린다. 그 이유는 컨텍스트 스위칭 때문이다.  

 그러나 두 쓰레드가 서로 다른 자원을 사용하는 작업의 경우에는 싱글 쓰레드 프로세스보다 멀티 쓰레드 프로세스가 더 효율적이다. 예를 들어 사용자로부터 데이터를 입력받는 작업, 네크워크로 파일을 주고받는 작업 등과 같이 외부기기와의 입출력을 필요로 하는경우가 이에 해당한다. 

4. 쓰레드 그룹

 

 

 

1. 스레드 개념

2. 스레드 관리

3. 동기화

4. 동기화 도구

5. 스레드 풀

6. 스레드에 안전한 콜렉션

7. 포크/조인

 

 

 

 

'CS > ETC.' 카테고리의 다른 글

그누보드, 영카트  (0) 2021.12.18
서버 성능 테스트  (0) 2021.08.11
ServerSideRendering vs. ClientSideRendering  (0) 2021.07.07
리눅스 메모리 관리  (0) 2021.06.26
*1. OOP(객체 지향 프로그래밍)  (0) 2021.06.02