Java 5주차 (1)

신성훈·2024년 5월 2일
0

TIL

목록 보기
1/162
post-thumbnail

오늘의 학습 키워드

  • 프로세스와 쓰레드
  • 멀티 쓰레드
  • Threed와 Runnable

프로세스와 쓰레드

  • 프로세스 : 운영체제로부터 자원을 할당받는 작업의 단위
  • 쓰레드 : 프로세스가 할당받은 자원을 이용하는 실행의 단위
  • 프로세스
    -“실행 중인 프로그램”을 의미

  • 프로세스 구조
    -OS가 프로그램 실행을 위한 프로세스를 할당해줄때 프로세스안에 프로그램 Code,Data,메모리 영역(Stack, Heap)을 함께 할당

    • Code
      main 메소드와 같은 코드를 의미

    • Data
      프로그램이 실행 중 저장 할 수 있는 저장공간을 의미

    • Memory (동적 변수 저장)
      Stack : 지역변수, 매개변수 리턴 변수를 저장하는 공간
      Heap : 프로그램이 동적으로 필요한 변수를 저장하는 공간 (new(), mallock())

  • 쓰레드

    코드실행의 흐름

  • 쓰레드의 생성
    -프로세스가 작업중인 프로그램에서 "실행요청"이 들어오면 쓰레드(일꾼)을 만들어 명령을 처리

  • 쓰레드 자원
    -쓰레드들은 실행을 위한 프로세스 내 주소공간이나 메모리공간(Heap)을 공유한다.
    -자신만의 메모리공간(Stack)도 할당받는다.

  • Java 쓰레드 (=일반 쓰레드와 동일)
    -JVM 프로세스 위에서 실행
    -Java Main 쓰레드부터 실행되며 JVM에 의해 실행

멀티 쓰레드

  • 멀티 쓰레드 <-> 싱글 쓰레드
    -Java는 멀티 쓰레드를 지원하며 병렬로 코드를 실행 시킬 수 있다
    -걸리는 시간이나, 동작을 예측할수가 없다.

  • 싱글 쓰레드
    -프로세스 안에서 하나의 쓰레드만 실행
    -main() 메서드만 실행시켰을때 이것을 싱글 쓰레드 -> main() 메서드의 쓰레드를 ‘메인 쓰레드’
    -메인 쓰레드가 종료되면, JVM 도 같이 종료

  • 멀티 쓰레드
    -프로세스 안에서 여러개의 쓰레드가 실행되는 것
    -메인 쓰레드외에 다른 작업 쓰레드들을 생성

    • 장점
      여러개의 쓰레드(실행 흐름)을 통해 여러개의 작업을 동시에 할 수 있어서 성능이 좋아짐
      자원을 보다 효율적으로 사용
      응답 쓰레드와 작업 쓰레드를 분리하여 빠르게 응답을 줄 수 있습니다. (비동기)

    • 단점
      동기화 문제가 발생 - 프로세스의 자원을 공유 하면서 작업을 처리하기 때문에 자원을 서로 사용하려고 하는 충돌이 발생
      교착 상태(데드락)이 발생 - 둘 이상의 쓰레드가 서로의 자원을 원하는 상태가 되었을 때 서로 작업이 종료되기만을 기다리며 작업을 더 이상 진행하지 못하게 되는 상태

Threed와 Runnable

  • 구현방법 3가지
    -Thread - run() 메서드에 작성된 코드가 쓰레드가 수행할 작업, 다중 상속을 지원하지 않아서 Thread를 상속 받아 처리하는 방법은 확장성이 매우 떨어짐

    -Runnable - run() 메서드도 쓰레드가 수행할 작업, Runnable은 인터페이스이기 때문에 다른 필요한 클래스를 상속 받을 수 있어 확장성에 유리하다.

    -람다식 - run() 메서드에 작성했던 쓰레드가 수행할 작업을 실행 블록 { } 안에 작성, setName() 메서드는 쓰레드에 이름을 부여, Thread.currentThread().getName() 은 현재 실행 중인 쓰레드의 이름을 반환

📝오늘의 회고

컴퓨터의 CPU의 코어 갯수에 따라 성능이 달라지는 것 처럼 쓰레드도 싱글, 멀티 나누는 것으로 보인다.
오늘도! 쳐지지 말고 포기하지말고 힘내서 가보자고~~~

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글