Dorothy_YANG
With Dorothy
Dorothy_YANG
전체 방문자
오늘
어제
  • 분류 전체보기 (279)
    • Hi, I'm Dorothy 🕵️‍♂️ (21)
      • Slowly but Surely (18)
      • IT certifications (3)
    • 🤯TIL (80)
      • HTML & CSS (2)
      • Javascript & jQuery (13)
      • React (13)
      • C언어 (1)
      • JAVA (22)
      • Python (2)
      • Oracle SQL (10)
      • My SQL (5)
      • Spring (12)
    • 💻Programmers (17)
    • 🏫 Open API_JAVA (101)
    • 🌎 Project (10)
      • Shopping (10)
    • 💥 Error (24)
    • ⚙ Setting (23)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • 서버등록
  • googlecolaboratory
  • 기간설정
  • spring
  • 코딩앙마
  • 콜라보레이토리
  • 시작일종료일
  • Database
  • 오류해결
  • 백준
  • Javascript
  • 기간쿼리
  • SQLD합격후기
  • 독학후기
  • HTML
  • oracle
  • java
  • SQL
  • 이것이자바다
  • SQLD합격
  • AllArgsConstructor
  • colaboratory
  • Eclipse
  • 연습문제
  • 비쥬얼스튜디오코드
  • CSS
  • 창초기화
  • 파이썬온라인
  • sql기간
  • 노마드코더

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Dorothy_YANG

With Dorothy

[44일차] 멀티 스레드 개념 / 작업 스레드 생성과 실행 / 스레드 우선순위
🏫 Open API_JAVA

[44일차] 멀티 스레드 개념 / 작업 스레드 생성과 실행 / 스레드 우선순위

2022. 9. 26. 10:30
728x90

20220923(금)

  • 목차
    - 멀티 스레드 개념
    - 작업 스레드 생성과 실행
    - 스레드 우선순위

< 멀티 스레드 개념 >

1) 프로세스와 스레드

  • 프로세스(process)
    실행 중인 하나의 프로그램으로 기본적으로 한 개의 스레드(= 메인 스레드)를 하나씩 갖고 있다.
    하나의 프로그램이 다중 프로세스를 만들기도 함
    (운영체제로부터 메모리를 할당받아 사용중인 프로그램)

  • 하나의 프로그램이 다중 프로세스 만들기도
    ex) 그림판 ➡ 실행 할 때마다 프로세스가 여러개 만들어진다.

그림판 3개 켜놓으면 프로세스가 3개 실행된다.

 

      ✔ 프로세스 개념 쉽게 이해하기

      - 책꽂이 : 하드디스크 (HDD, SDD) ➡ 커야지 많은 책(데이타와 프로그램) 보관 가능
      - 책 : 데이타, 프로그램(S/W)
      - 책상 : 메모리(램)
      - 책상에서 책을 펼친다 : 메모리를 할당 받았다. ➡ 펼쳐진 상태를 프로세스라 한다.

 

  • 멀티 태스킹(multi tasking)
    두 가지 이상의 작업을 동시에 처리하는 것
    ex) 음악을 들으면서 작업하는 것
멀티 프로세스 멀티 스레드 (프로세스 안의 개념)
독립적으로 프로그램들을 실행하고 여러 가지 작엄 처리 한 개의 프로그램을 실행하고 내부적으로 여러 가지 작업 처리

 

     ✨ 스레드?
     모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행한다.
     또한, 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process)라고 합니다.

     ex) 게임 자체가 엄청난 스레드로 만들어진다. 🤯🤯
           게임 캐릭터를 만들면 한명 움직일 때 다른애 못움직임.
            ➡ 여러개의 스레드를 만들어놔야지 볼 수 있음.

 


2) 메인 스레드 - main() 메소드의 상위개념

  • 모든 자바 프로그램은 메인 스레드가 main() 메소드 실행하여 시작
  • main() 메소드의 첫 코드부터 아래로 순차적으로 실행
  • main 스레드는 작업 스레드들을 만들어 병렬로 코드들 실행 (같은 레벨)

 

      실행 중인 하나의 프로그램으로 기본적으로 한 개의 스레드(= 메인 스레드)를 하나씩 갖고 있다.

      Hello.java & java Hello.java ➡ Hello.class(바이트코드) ➡ java Hello
      - JVM : Hello.class ➡ 기계어 변환 후 실행
      - JVM : main 스레드 호출 ➡ main()메소드 동작

      * 메서드를 만들고 스레드로 붙여넣으면 각 코드들을 동시진행하게 만들 수 있다.

 


< 작업 스레드 생성과 실행 >

  • CPU : 스레드 단위로 작업을 진행한다.
✨ Thread 클래스로부터 직접 생성 Thread 하위 클래스로부터 생성
class Test implements Runnalbe { } class Test extends Thread { }
얘가 더 많이 사용된다.

 왜? ➡ thread 클래스 상속은 하나만 받을 수 있는데
runnable 이용하면 다른 것도 받을 수 있기 때문!

ex) class Test extends 클래스 implements Runnalbe { }
-

 

  • 프로세스와 스레드 차이

프로세스와 스레드 차이 살펴보기

 

  • 스레드의 이름
    - 메인 스레드 이름: main
    - 작업 스레드 이름 (자동 설정) : thread.getName();
    - 작업 스레드 이름 변경 : thread.setName("스레드 이름");
    - 코드 실행하는 현재 스레드 객체의 참조 얻기 : Thread thread = Thread.currentThread();

< 스레드 우선순위 >

  • 멀티 스레드 작업은 병렬적으로 실행되는 것처럼 보이지만, 
    사실은 번갈아가며 실행하는 동시성 작업이다.
    번갈아 실행하는 것이 워낙 빠르다보니 병렬성으로 보일 뿐이다.

 

  • 스레드 스케줄링
     : CPU가 스레드를 번갈아주며 실행시키는 것
       스레드의 개수 > 코어의 수 ➡ 스레드를 어떤 순서로 동시성으로 실행할 것인가 결정
       (스레드 : 내가 부릴 노예의 손 개수 / 코어 : 내가 부릴 노예의 수)
     : 스케줄링에 의해 스레드들은 번갈아 가며 run() 메소드를 조금씩 실행 ➡ 결과치를 뽑아냄

  • 개발시)
    내가 원하는 방향으로 제대로 구성되어있는지 테스트 많이 실행한다. ➡ 일정한 패턴으로 나오는지 확인

  • 자바의 스레드 스케줄링 (2가지 방식을 함께 실행)
우선 순위(Priority) 방식 순환 할당(Round-Robin) 방식
코드로 제어 가능
우선 순위가 높은 스레드가 실행 상태를 더 많이 가지도록 함
1 ~ 10까지 값을 가질 수 있으며 기본은 5

BUT, 절대적인 우선 순위는 아니다.
➡ cpu는 얘 하나만 바라보고 있는게 아니야!
➡ 
* 코드로 제어할 수 없음 (조금의 인위적인 제어는 가능)

시간 할당량 정해서 하나의 스레드를 정해진 시간만큼 실행

 

  • 스레드 10개를 생성하고 20억 번의 루핑을 누가 더 빨리 끝내는가를 테스트한 예제.
    Thread 1 ~ 9는 우선순위를 가장 낮게 주었고,  Thread 10은 우선순위를 가장 높게 주었다.
    ➡ 결과는 Thread 10의 계산 작업이 가장 빨리 끝난다.

728x90
저작자표시 (새창열림)

'🏫 Open API_JAVA' 카테고리의 다른 글

[46일차] 스레드 그룹 / 스레드풀 / 컬렉션 프레임워크 / List 컬렉션  (0) 2022.09.28
[45일차] 동기화 메소드와 동기화 블록 / 스레드 상태 / 스레드 상태 제어 / 데몬 스레드  (0) 2022.09.27
[43일차] Math, Random 클래스 / Date, Calendar 클래스 / Format 클래스 / java.time 패키지  (0) 2022.09.23
[42일차] String 클래스 / String Tokenizer 클래스 / String Buffer, String Builder 클래스 / 정규 표현식과 Pattern 클래스 / Arrays 클래스 / 포장(Wrapper) 클래스 (API 클래스)  (0) 2022.09.22
[41일차] 자동 리소스 닫기 / 사용자 정의 예외와 예외 발생 / java.lang과 java.util 패키지 / Object 클래스 / Tomcat 설치  (0) 2022.09.21
    '🏫 Open API_JAVA' 카테고리의 다른 글
    • [46일차] 스레드 그룹 / 스레드풀 / 컬렉션 프레임워크 / List 컬렉션
    • [45일차] 동기화 메소드와 동기화 블록 / 스레드 상태 / 스레드 상태 제어 / 데몬 스레드
    • [43일차] Math, Random 클래스 / Date, Calendar 클래스 / Format 클래스 / java.time 패키지
    • [42일차] String 클래스 / String Tokenizer 클래스 / String Buffer, String Builder 클래스 / 정규 표현식과 Pattern 클래스 / Arrays 클래스 / 포장(Wrapper) 클래스 (API 클래스)
    Dorothy_YANG
    Dorothy_YANG
    Slowly but Surely, 비전공 문과생의 개발공부

    티스토리툴바