본문 바로가기
java/thread(동시성)

[Udemy: Java Multithreading, Concurrency & Performance Optimization] Motivation

by 권성호 2021. 11. 25.

멀티스레딩을 사용하는 이유

동시성을 구현하여 반응성을 높인다.

  • Single core 상황이라고 가정해 보자.
  • 프로세스의 수행 과정은 크게 연산과 입출력으로 분리할 수 있다.
    • 입출력은 core를 점유하지 않는다.
      • 현대적인 컴퓨터는 대부분 IO를 담당하는 별도 장치가 있다.
    • 사용자의 입출력은 컴퓨터 입장에서 매우 block이 심한 작업이다.
      • 예를 들어, 키보드 입력이라고 하자.
      • 사용자는 0.1초에 한 번씩 키보드 입력을 한다고 해도 컴퓨터 clock속도에 비해 매우 매우 느린 속도다.
      • 근데, 일반적인 프로그램은 이걸 기다린 후 처리해야 한다.(반응형 프로그램)
    • 많약 동시성이라는 개념이 없다면?
      • Single core에서 하나의 프로세스가 끝날 때까지 다른 프로그램이 대기 상태가 된다.
      • 근데, core를 점유하고 있는 프로세스가 사실 io작업으로 인해 대부분 놀고 있다?!
      • 결국 아무리 좋은 성능을 가진 cpu를 사용하더라도 일부분만 사용할 수밖에 없다.
      • 결론적으로, cpu도 효율적으로 못쓰고 프로그램도 block 되어서 사용자 경험도 나빠진다.
      • context switching 비용이 발생하지만, 근본적으로 적절하게 context switching을 하게 되면 cpu를 오히려 더 효율적으로 쓸 수 있다.
    • 따라서, 놀고 있는 core를 더 효율적으로 사용하고 사용자 경험을 높이기 위해 시분할 기반의 다양한 스케쥴링 방법을 OS-level에서 구현했다.
    • Application 개발자 입장에서(특히 java 개발자 입장에서), multithreading 기반 프로그램을 작성하면 OS가 구현한 스케쥴링의 장점을 살릴 수 있다.
    • 즉, java에서 multithreading 기반 프로그램을 작성하면 동시에 여러 작업을 수행하여 cpu를 효율적으로 쓸 수 있고 반응성을 높일 수 있다.

병렬성을 구현하여 성능을 높인다.

  • 현대적인 컴퓨터는 대부분 하나 이상의 core를 갖는다.
  • 따라서 single-core 시스템에서 시분할 개념을 통한 동시성을 제공하는 것을 넘어서, 진정한 병렬 프로그래밍이 가능하다.
  • 이렇게 좋은 환경에서 multithreading을 구현 안 할 이유가 없다.
  • java에서 multithreading 기반 프로그래밍을 하면, OS의 지원을 받아 여러 개의 core에서 병렬적으로 수행되기 때문에 다수의 core를 가진 현대적 컴퓨터를 십분 활용할 수 있다.

멀티스레딩을 사용할 때 조심해야 할 것

  • 하나의 process에서 thread는 일부 자원을 공유하게 된다.
  • 따라서 필연적으로 임계 영역이 발생하고, 이를 방어하기 위한 locking 메커니즘이 생기고, 잘못되면 deadlock도 발생하는 등 많은 위험이 있다.
  • 그럼 프로세스 단위로 작업을 분할하지 왜 스레드를 쓸까?
    • 하나의 프로세스는 완전히 격리되기 때문에 임계 영역으로 인한 이슈가 거의 없다.
    • 근데 너무 무거워서 많이 만들기 힘들다.
    • 또, 격리된다는 특성을 반대로 말하면 관리 범위를 특정할 수 있다.
      • 수많은 스레드는 하나의 프로세스라는 범주에서 정리될 수 있다.
      • 수많은 프로세스는 이를 관리할 수 있는 주체가 딱히 없다.
      • 따라서 문제가 발생했을 때 멀티스레드로 구현한 경우는 정리가 쉽지만 멀티 프로세스로 구현한 경우는 정리가 매우 매우 어렵다.

그럼 이제부터 java에서 멀티 스레딩에 대해 공부해 보자!

<참고>

https://www.udemy.com/course/java-multithreading-concurrency-performance-optimization/learn/lecture/10187964?start=315#overview


댓글