2020년 9월 25일 금요일

(자바교육/JAVA교육)그림으로보는 자바 스레드, 프로세스, 멀티쓰레드, 자바스레드다루기(자바학원/자바/JAVA/자바강좌/자바동영상/자바강의/JAVA강의/JAVA동영상)

 (자바교육/JAVA교육)그림으로보는 자바 스레드, 프로세스, 멀티쓰레드, 자바스레드다루기(자바학원/자바/JAVA/자바강좌/자바동영상/자바강의/JAVA강의/JAVA동영상)


https://youtu.be/3vKGxqvCj9w


 

 


1. Process vs Thread


스레드는 프로세스의 공유 메모리안에서 실행되는데, 스레드


는 프로세스 내에 존재 한고 모든 프로세스에는 최소한 하나의 스레드가 있다. 

프로세스는 별도의 메모리 공간에서 실행된다.

실행중인 프로그램을 프로세스라고 하고 스레드는 프로세스의 하위 집합으로 스레드는 메모리, 파일등 프로세스의 리소스를 공유한다.

프로세스는 프로그램 or 응용 프로그램과 동의어로 인식되지만 사용자가 하나의 응용프로그램으로 보는 것은 실제로 협력하는 여러 프로세스 일 수 있다.

프로세스는 작업(Task)라고 하고 스레드는 경량의 프로세스라고 한다.

스레드는 wait(), notify(), notifyAll()과 같은 메소드를 사용하여 동일한 프로세스의 다른 스레드와 직접 통신 할 수 있다. 프로세스는 프로세스 간 통신을 사용하여 다른 프로세스와 통신 할 수 있다.

새로운 스레드는 자바에서 쉽게 생성된다.(스레드 start), 그러나 새 프로세스를 생성하려면 상위 프로세스를 복제해야 한다.



스레드는 동일한 프로세스의 다른 스레드를 제어하지만 프로세스는 형제 프로세스를 제어하지 않고 하위 프로세스 만 제어한다.


자바에서 메모리 관리 및 신호 처리(Signal Handling)와 같은 작업을 수행하는 System Thread까지 포함하면 여러 스레드가 있지만 자바프로그램의 관점에서 보면 단일 프로세스, main Thread로 시작되며 ProcessBuilder를 이용하여 추가 프로세스를 생성 할 수 있다.

프로세스에는 여러 스레드가 포함될 수 있다.

애플리케이션을 실행하면 OS가 새 프로세스를 시작하고 다른 스레드를 시작할 수 있는 해당 앱의 기본 스레드를 실행한다.(자바프로그램의 경우 main Thread)

멀티 스레딩의 장점은 응용 프로그램이 동시에 다른 작업을 실행할 수 있다는 것이다.

프로세스에는 고유 한 주소 공간이 있는 반면 동일한 프로세스의 스레드는 프로세스안의 공유 메모리 공간에서 실행되므로 데이터의 공유는 신중하게 접근해야 한다. (동일한 변수에 대한 읽기/쓰기)


2. 스레드

실행중인 프로그램 내의 순차적 제어 흐름

자바 프로그램이 시작되면 JVM의 main 스레드가 main() 메소드를 실행한다. 또한 프로그램 내부에서 main 스레드와 병렬로 프로그램 코드의 일부를 실행할 수 있는 더 많은 스레드를 만들 수 있다.

Java 스레드는 다른 자바 객체와 같은 객체로, java.lang.Thread 클래스의 인스턴스 또는이 클래스의 서브 클래스 인스턴스 이다. 


자바에서 스레드를 만드는 방법은  Thread 클래스를 상속받는 클래스를 만들고 run() 메소드를 구현하여 스레드가 할 일을 작성한다음 인스턴스를 생성 후 start() 메소드를 호출하는 방법이 있고 runnable() 인터페이스 구현 객체를  Thread 인스턴스의 인자로 주고 스레드를 만들수도 있다.

다중 스레드 프로그램

동시에(concurrently) 여러가지 작업을 할 수 있음

프로그램 내부에 2개 이상의 스레드들이 서로 침범하지 않으면서도 동시에 실행의 흐름이 진행되는 프로그램


a와 b라는 스레드가 있을때 a스레드가 진행되면서 CPU의 상태가 바뀌게 되는데 이를 저장하고 b의 스레드에 맞게 CPU를 맞추고 b스레드를 처리하는 것이다. 물론 b처리후 얼마후 다시 a가 처리된다. 이때 a와 b가 같은 프로그램이면 멀티 스레드이며 서로 다른 프로그램 일 경우에는 멀티태스킹이 된다.

CPU가 하나인 컴퓨터의 입장에서는 여러 개의 흐름이 동시에 돌아간다는 것은 불가능 하다. 단지 OS가 여러 개의 흐름이 돌아 가는 것처럼 보일 수 있도록 CPU등의 환경 상태를 각각의 흐름에 맞게  설정 하는 것이다.



자바 언어가 기존 언어와 구분되는 큰 차이는 Thread를 언어 차원에는 지원 하는 것이다.


쉽게 스레드를 관리 할 수 있게 해 준다. CPU가 여러 개인 경우 각각의 CPU에서 개별적인 프로그램 흐름을 만들 수 있게 해 준다. 즉 CPU가 2개 이면 2개의 스레드가 상태 변환 없이 각각의 CPU에서 돌아가게 되는 것 이다.

프로세스는 실행 환경과 제어환경으로 이루어져 있는데 스레드는 제어부에 해당 된다. 기본적으로 하나의 프로그램이 실행 되는 것을 프로세스가 발생 했다고 표현하며 이 프로세스는 또 다시 여러 개의 스레드를 거느릴 수 있는데 프로세스 간의 직접 상태 변환보다는 이들 프로세스들이 거느리고 있는 스레드에게 제어권을 맡김 으로서 상태 변환에 따르는 부담을 줄인다. (한 프로세스 내의 스레드들이 같은 메모리 공간을 사용)

스레드의 최대 장점은 프로세스 내의 정보들이 공유가 쉽다는 것이다. 물론 여러 개의 프로세스로 같은 작업을 하더라도 프로세스간의 통신을 통해 정보를 공유 할 수 있지만 스레드로서 공유하는 것과는 차이가 있다.

장점

실행 속도

빠른 반응 시간


동시성을 가지는 프로그램을 쉽게 작성

자바 툴을 이용하여 자바 프로그램을 실행했다면 이것은 프로세스를 실행 시킨 것 이다. 하지만 자바 프로그램의 main() 메소드가 호출되서 프로그램이 돌아가기 시작하는 것은 스레드가 돌아간다는 뜻이다.

모든 실행의 단위는 프로세스 안의 스레드 이다.

자바 프로그램을 실행하게 되면 메인 스레드가 main 메소드를 호출해 주는 것으로 프로그램이 시작된다.



3. 실습


//결과[스레드이름,우선순위,그룹명]:Thread[main, 5, main]

//이 스레드는 main이라는 이름을 가졌으며 5라는 우선순위를 가진다.

class MainThread {

public static void main(String[] args) {

Thread currThread = Thread.currentThread();

System.out.println(currThread);

}

}



#자바프로세스#자바스레드, #자바쓰레드, #자바Thread#ProcessBuilder#자바쓰레드예제, #스레드, #프로세스,  #자바#JAVA#자바동영상#자바강의#자바교육#자바강좌#자바동영상강의#추천자바강의#추천자바강좌#JAVA동영상#JAVA강의#JAVA강좌#JAVA교육#JAVA#추천JAVA강의#추천JAVA교육#추천JAVA강좌#자바소스#자바온라인교육#자바온라인강의 

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...