ABOUT ME

관심지식인 주식/정보처리기술사/IT개발/AI 관련 자료를 모아둔 지식창고 입니다.

Today
Yesterday
Total
  • 자바 concurrent 프로그래밍 기본
    java 2021. 3. 26. 11:29
    728x90
    반응형

    process와 thread

    프로세스(Process): 컴퓨터에서 연속적으로 실행되고 있는 프로그램을 말하는 것으로 여러개의 프로세서를 사용하면 멀티프로세싱이고 여러개의 프로그램을 같은 시간에 시분할 방식으로 돌리면 멀티태스킹이라 말한다.

    쓰레드(Thread): 프로세스내에서 실행되는 흐름의 단위를 말하는 것으로 하나의 프로그램은 최소한 하나의 쓰레드(main thread)를 가진다. 프로그램에 따라 둘 이상의 쓰레드를 동시에 실행할수 있는데 이를 멀티쓰레드라고 부른다.

    I/O와 NIO

    thread 사용의 위험성

    • race condition 상황이 발생함.
      • 여러 개의 thread가 동시에 실행되면서 서로의 연산에 간섭이 발생해 결과가 달라지는 상황을 의미한다.
    • deadlock, starvation(소모상태), livelock이 발생할 가능성이 있음.
    • 성능 이슈
      • thread가 많은 프로그램에서는 context switching(다른 thread가 실행될 수 있게 스케줄러가 현재 실행 중인 thread를 잠시 멈출 때)이 빈번하게 발생하고, 이 때문에 상당한 부담이 생긴다.

    모든 자바 프로그램은 기본적으로 thread를 사용한다. 거의 모든 자바 프로그램이 multi-thread로 동작하는 프로그램이기 때문에 concurrent 개념을 잡는데 어려움이 있지만 명확히 이해하고 사용해야 한다.

    Thread Safe

    • 상태 없는 객체는 항상 Thread Safe하다.
    • 상태를 가지는 객체의 변수에 여러 개의 Thread가 동시에 접근할 때는 적절한 동기화 작업이 필요하다.
    • Thread Safe를 보장하기 위해 Lazy initialization이나 읽고, 수정, 쓰기와 같은 일련의 작업을 단일 연산으로 실행해야 한다.
    • 상태를 일관성 있게 유지하려면 관련 있는 변수들을 하나의 단일 연산으로 갱신해야 한다.

    Lock

    • 자바는 단일 연산 특성을 보장하기 위해 synchronized 구문을 사용할 수 있다.
    • lock은 thread가 synchronized 블록에 들어가기 전에 자동으로 확보되며 정상적으로든 예외가 발생해서든 해당 블록을 벗어날 때 자동으로 해제된다.
    • 특정 lock으로 보호된 코드 블록은 한 번에 한 thread만 실행할 수 있기 때문에 lock으로 보호되는 서로 다른 블록 역시 단일 연산으로 실행된다.

    재진입성

    • 암묵적인 Lock은 재진입이 가능하다. 특정 thread가 자기가 이미 획득한 lock을 다시 확보할 수 있다.
    728x90
    반응형
Designed by Tistory.