ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [매일읽기] Understanding Java threads once and for all
    개발자 라이프/매일읽기 2020. 8. 4. 21:45
    반응형

    원문 : https://medium.com/swlh/understanding-java-threads-once-and-for-all-711f71e0ec1e

     

    Understanding Java threads once and for all

    Sometimes, we want to perform several tasks at the same time. The computer can do this by using Threads. You might be reading this post…

    medium.com

    스레드(Thread)

    • 큰 데이터를 서브 셋으로 쪼개 병렬로 처리할 때 스레드로 처리할 수 있음
    • CPU 프로세서 코어 수 등 하드웨어 스펙에 따라 스레드 성능이 영향을 받을 수 있음
    • 만약 스레드 수가 코어 수보다 많다면, 각 프로세스는 실제로 병렬 형태로 처리되는 것이 아니기 때문에 공유되는 객체(SO, Shared Object)는 가용 코어에서의 각 프로세스가 소모하는 시간을 관리해야 함

    테스크(Task, 작업) 만들기

    본문에서 스레드 인스턴스를 테스크로 정의했습니다.

    •  Thread 클래스를 이용하여 테스크를 생성할 수 있음
    • 아무 파라미터가 없는 Thread 생성자로 만든 테스크는 어떠한 비즈니스 로직을 담고 있지 않음
    • Runnable 아규먼트와 함께 테스크를 생성할 수 있음
    • Runnable 인터페이스를 구현한 클래스는 테스크에 대한 비즈니스 로직을 담고 있음
      • run() 메소드 내부에 로직이 구현됨

    테스크 실행

    • Thread 클래스의 start() 메소드로 테스크 실행
    • 여러 테스크를 실행했을 때, 실제 처리 순서는 그 실행 순서와 다를 수 있음

    모니터링

    • 스레드 모니터링은 JConsole을 이용하여 할 수 있음
    • JConsole은 Jdk 디렉터리 중 bin 디렉터리 내부에 위치함

    이런 유틸도 있었군요

    스레드들이 서로에게 영향을 준다면?

    • 여러 테스크들이 공통의 Runnable 구현 클래스를 아규먼트로 생성했다면 테스크들 간 동작은 서로에게 영향을 줄 수 있다.
      • ex. Counter (본문 참조)
    • 이 때 Runnable 구현 클래스는 run() 메서드 내부에서 synchronize 키워드로 동시 접근을 막을 수 있음
    • 접근 제어된 리소스에 접근하기 위해 mutex를 사용

    본 문의 예제 코드에 synchronize 키워드를 적용하지 않았을 때와 적용했을 때의 결과값

    스레드 간 순서가 보장되어야 한다면?

    • synchronize 키워드는 원자적 실행만 보장하기 때문에 스레드 간 실행 순서를 보장하지 않음
    • 스레드의 실행 순서를 구성하기 위해 wait() 메소드를 사용
    • wait() 메소드는 모든 자바 객체에 구현되어 있음
    • wait() 메소드는 동기화된(synchronized) 자원을 잠금 해제할 수 있는 키를 반환
      • 그래서 자원을 필요로하지 않는 다른 스레드는 해당 리소스를 기다릴 필요 없음
    • 자원이 점유 해제되면 대기 스레드들에게 알려(notify) 데드락 없이 지속적인 실행이 가능하도록 함

    스레드의 처리를 종료해야 한다면?

    • 공통의 작업을 위해 여러 독립적인 스레드가 구성된다면 그 스레드들을 오케스트레이션 해야 함
    • 이때, 스레드들은 공통으로 가지는 일시적인 속성을 모니터링하면서 처리 진행 여부를 판단할 수 있음
      • 해당 속성은 임계 영역에 포함되지 않는 비동기 속성

    읽고 나서

    • 오래간만에 스레드를 복습해서 좋았음
    • notify 메소드를 이용해서 순서를 구성하는 것은 조금 더 자세히 살펴볼 필요가 있을 듯

     

    반응형

    댓글

Designed by Tistory.