본문 바로가기
읽은책

자바 병렬 프로그래밍 1 ~ 2

by e-pd 2023. 9. 28.

1장

스레드

  • 프로세스에 할당된 자원 공유(메모리, 파일 핸들링)
  • 스레드는 각각 프로그램 카운터, 스택, 지역변수를 갖음
  • 한 프로그램 내 여러 스레드를 동시에 여러 개 CPU 할당 실행

안정성

  • 잘못된 일은 일어나지 않음

활동성

  • 원하는 일이 일어난다

성능

  • 쓰레드가 많으면 컨텍스트 스위칭이 빈번

2장

쓰레드 세이프한 코드는 공유되고 변경할 수 있는 상태에 대한 접근 관리

  • 상태 변수를 스레드간에 공유하지 않음
  • 상태 변수를 변경할 수 없도록 만들기
  • 상태 변수에 접근할 때는 동기화

객체지향

  • 스레드 세이프한 클래스를 만들고 캡슐화, 불변 객체 활용

쓰레드 세이프

  • 여러 쓰레드가 클래스에 접근해도 정확히 동작

정확성(correctness)

  • 클래스의 명세에 부합

경쟁 조건

  • 상대적 시점이나 JVM이 여러 스레드를 교차하는 상황에 따라 계산 정확성이 달라지면 나타남.

  • 상태를 일관성 있게 유지하려면 변수들을 하나의 단일 연산으로 갱신

암묵적인락

  • 자바에서는 synchronized 키워드 제공
  • 자바에 내장된 락을 암묵적인락(intrinsic loc), 모니터락(monitor lock)이라고 함
  • 자바에 내장된 락은 뮤택스로 동작
  • 메서드, 서블릿에 지나친 범위로 synchronized을 걸면 성능 이슈

재진입성

  • 자신이 확보한 락을 다시 확보할 수 있음.
  • 쓰레드 단위로 락을 얻음.
  • 락 획득: 1, 락 해제: 0

성능

  • synchronized 은 필요한 블록 범위에 사용하기

자바에서 System Print Out을 로그로 남용하면 안되는 이유

  • 내부에 synchronized 처리가 되어있다.