자바 동시성 - 1. 개요

roon-replica·2022년 8월 17일
0

java

목록 보기
3/6
  • 참고 자료
    • 자바 병렬 프로그래밍(조슈아 블로쉬 외)

동시 작업에 대한 역사

  • 운영체제는 여러 프로그램을 각자의 프로세스 내에서 동시에 실행할 수 있도록 발전했다.
    프로세스마다 자원을 할당하기 때문이다.
  • 프로세스 개념은 자원 활용, 자원의 공정한 공유, 편의성? 측면을 고려하다 보니 만들어졌다.
    스레드도 같은 이유로 고안됐다고 함..
  • 스레드 덕분에 한 프로세스 안에 여러 프로그램 제어 흐름이 공존할 수 있게 되었다.
    스레드는 프로세스에 할당된 자원(메모리 공간)을 공유함.
    그래서 한 프로세스 내의 모든 스레드는 같은 변수에 접근하고, 같은 heap에 객체를 할당함...

스레드의 이점

  • 스레드를 잘 쓰면 비동기적인 흐름을 순차적인 느낌으로 바꿀 수 있다..?

  • 서버 애플리케이션에서 자원 활용도와 처리율을 높이는 데 유용하다고 함..!

  • 프로세서 스케줄링의 기본 단위는 스레드이다..?
    그래서 스레드가 여러 개인 프로그램은 여러 프로세서에서 동시에 실행될 수 있어서 효율적임.

  • 여러 스레드를 사용하면 프로세서가 하나라도 처리 속도를 높일 수 있다???
    예를 들어 blocking I/O 때문에 CPU가 놀 때 다른 스레드를 실행하면 되니까..!

스레드 사용의 위험성

  • 안전성 vs 활동성 vs 성능

  • 스레드가 많은 프로그램은 컨텍스트 스위칭이 더 빈번하고, 상당한 부담이 된다고 함.
    실행중인 컨텍스트를 저장하고 다시 읽어오면서 메모리 지역성이 손실되고, cpu 시간을 스케줄링에 소모하게 됨.
    스레드 동기화는 컴파일러 최적화를 방해하고, 메모리 캐시를 지우기도 한다고 함...!
    컨텍스트 스위칭이 성능에 어느정도나 영향을 주는지는 감 없음...

Questions

  • 스레드는 복잡한 비동기 코드를 더 단순한 순차적 코드로 바꿔 복잡한 시스템을 단순하게 개발할 수 있게 해준다고 함...
    -> 그런가..? 복잡한 비동기 코드는 뭔데?

  • 스레드는 멀티프로세서 시스템의 능력을 최대한 끌어낼 수 있는 가장 쉬운 방법이라고 함...
    -> 그렇겠지.. 그런가..?

  • event loop vs event dispatch thread

  • object finalization

  • RMI (Remote Method Invocation)
    다른 JVM에서 실행 중인 객체의 메서드를 호출할 수 있게 해주는 건데..
    head first design pattern 책에서 proxy 패턴 소개할 때도 나왔던 건데 잘 모름.
    marshal/ unmarshal도...

profile
집중 ➝ 프로세서↑ 시간 투자 ➝ 디스크↑

0개의 댓글