MultiThread

멀티 쓰레드 프로그래밍의 장점은 무엇인가요?

  • 프로세스를 이용하여 동시에 처리하던 일을 쓰레드로 구현할 경우 메모리 공간과 시스템 자원 소모가 줄어들게 된다.

  • 쓰레드 간의 통신이 필요한 경우에도 별도의 자원을 이용하지 않고, 전역 변수의 공간 또는 동적으로 할당된 공간인 Heap 영역을 이용하여 데이터를 주고 받을 수 있다.

  • 때문에 프로세스 간 통신 방법에 비해 쓰레드 간의 통신 방법이 훨씬 간단하다.

  • 쓰레드의 context switch는 프로세스의 context switch 와는 달리 캐시 메모리를 비울 필요가 없기 때문에 더 빠르다.

  • 따라서 시스템의 성능이 향상되고, 자원 소모가 줄어들며 프로그램의 응답 시간이 단축된다.

  • 이러한 장점 때문에 여러 프로세스로 할 수 있는 작업들을 하나의 프로세스에서 여러 쓰레드로 나눠 수행하는 것이다.

정리

  • 사용자의 반응을 향상시킨다.(응답성이 좋다.)

    • 하나의 프로세스에 여러 쓰레드를 생성하여 쓰레드에 각기 다른 작업을 하게 함으로써 특정 작업을 하면서도 사용자로부터 명령을 입력받게 할 수 있다.

  • 프로세스 내 리소스를 공유하여 경제적이다.(자원공유를 효율적으로 할 수 있다.)

  • 작업이 분리되어 코드가 간결해진다.

멀티 쓰레드 프로그래밍의 단점은 무엇인가요?

  • 멀티 프로세스 기반으로 프로그래밍할 때는 프로세스 간 공유하는 자원이 없기 때문에 동일한 자원에 동시에 접근하는 일이 없다.

  • 하지만, 멀티 쓰레딩을 기반으로 프로그래밍할 때는 이 부분을 신경써줘야 하는데, 서로 다른 쓰레드가 힙 영역을 공유하기 때문에 어떤 쓰레드가 다른 쓰레드에서 사용중인 변수나 자료구조에 접근하여 예상치 못한 값을 읽어오거나 수정할 수 있다.

  • 때문에 멀티 쓰레딩 환경에서는 동기화 작업이 필요하다.

  • 동기화를 통해 작업 처리 순서를 제어하고 공유 자원에 대한 접근을 제어하는 것이다.

  • 하지만 이로 인해 병목현상이 발생하여 성능이 저하될 수 있으므로, 과도한 락으로 인한 병목현상을 줄여야 한다.

정리

Last updated