19. 스레드

zza·2023년 10월 11일
0

Java

목록 보기
19/19

프로세스와 스레드

  • 프로세스 : cpu가 읽어서 실행중인 프로그램

  • CPU = 사장님

  • 프로세스 = 공장

  • 스레드 = 인부 -> 많을수록 효율적, 각 스레드는 독립 공간을 가진다.

  • 스레드 = 하나의 코드 블록. 코드 묶음

  • 프로세스 개수 < 스레드 개수 : 많을수밖에 없다.

  • 멀티 프로세스, 싱글 스레드 < 싱글 프로세스, 멀티 스레드
    : 속도가 빠르고, 스레드끼리 소통이 가능하다 = 자원 공유가 가능하다. -> 한번에 관리 가능.

  • 멀티 스레드
    - 속도가 빠르고 한번에 관리 가능하다.
    - 일이 꼬일 수 있다.
    - 설계를 철저히 해야한다.

  • 멀티 프로세스
    - 품이 많이 든다.
    - 에러 발생 가능성 적다.

  • 멀티스레드는 작업공간을 왔다갔다 하므로 저장공간이 많이 필요하다.

스레드 생성과 실행

  1. 스레드 클래스를 상속받아 사용
  2. Runnable 인터페이스 구현받아 사용
  • 인터페스이스를 구현하여 많이 사용한다.(상속은 하나만 가능하므로)

메서드

  1. 1
    : 스레드는 생성용, 러너블은 구현용
  1. o
  1. 멀티 스레드
    : 애플리케이션 = 프로그램 -> 실행: 프로세스
  1. run()
    : 실행공간. main에서 start 메서드를 이용하여 실행한다.

스레드 상태와 제어

  • yield : 양보

  • 위 메서드를 이용하여 스레드를 스케줄링한다.

  • 스레드는 종료했으나 실행되는 동안 버퍼에 쌓인 자료들은 살아있다.

  • run 대신 interrupt 사용
    : 정리하고 끈다.

  • yield: 실행 대기상태이므로, 언젠가 대기 풀어줘야 한다.

  • 메인이 대기하는 것.

  • c2 실행 > c1 실행

  • 일반적으로 메인스레드가 종료되어도, 작업중이던 다른 스레드는 계속 실행된나, 데몬 스레드는 모두 종료.

동기화와 협업

  • 다른 스레드의 접근 및 이용을 막는다.

  • 진입 시 락을 걸고, 벗어날 때 잠금 해제하지 않으면, 그 뒤로 아무도 못쓴다...

  • 임계영역 : 한번에 하나의 스레드만이 접근 가능한 구역
    -> 안전성 증가 (데이터의 독립성 등을 보장)

  1. 4
    : 멀티스레드는 부하 위험이 잇으므로, 스레드 개수에 제한을 둔다. -> Pool(제한구역)
  1. 데몬스레드
  1. 동기화
  1. Object
  • 스레드 사용하는 경우
  1. 웹서버 접속 -> 클라이언트 요청 한번에 처리

  2. 자바의 main -> 자바스프링의 controller

  3. 빅데이터&인공지능 : 대용량의 데이터를 분석하고 병렬처리

  4. 게임 개발 : 그래픽, 사운드, 중력과 같은 물리엔진 병렬처리

  5. 금융 계열 : 주식, 계좌이체, 실시간 모니터링

※chap14

profile
zza

0개의 댓글