Java/객체지향

[객체지향][쓰레드/thread] - 쓰레드

얄루몬 2022. 2. 26. 16:05

https://youtu.be/kNNHaAaFDs8?list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp 

📖본 포스팅은 '자바의 정석 - 남궁성 저자' 님의 책과 유튜브 강의를 보고 작성되었습니다.


[프로세스와 쓰레드 (process & thread)]

  • 프로세스: 실생 중인 프로그램, 자원(resources)과 쓰레드로 구성된다.
  • 쓰레드: 프로세스 내에서 실제 작업을 수행하는 것을 의미한다.
    • 모든 프로세스는 최소한 하나의 쓰레드를 가지고 있다.
프로세스 : 쓰레드 = 공장 : 일꾼
  • 싱글 쓰레드 프로세드
    • 자원 + 쓰레드
  • 멀티 쓰레드 프로세스
    • 자원 + 쓰레드 + 쓰레드 + .... + 쓰레드
    • 일꾼이 여러명이라 더 효과적으로 작업을 처리할 수 있다.
하나의 프로세스를 생성하는 것보다 하나의 새로운 쓰레드를 생성하는 것이 더 적은 비용이 든다.

자바의 경우엔 멀티 쓰레드를 지원하기 때문에 자바를 사용할 땐 이 방법이 훨~씬 효율적이다.


CGI 방식의 경우엔 프로세스를 늘리는 방식을 사용해야 했지만 JAVA의 경우엔 멀티 쓰레드를 지원하기에 쓰레드를 늘리는 방식으로 진행해 java의 인기가 시작되었다는 여담.. 

 

 

[멀티 쓰레드의 장단점]

장점 단점
시스템 자원을 보다 효율적으로 사용할 수 있다 동기화에 주의해야 한다.
= 공장을 공유(프로세스를 공유하는 상황을 말함)하는 상황에 문제가 발생한다.
사용자에 대한 응답성이 향상된다 교착 상태가 발생하지 않도록 주의해야 한다.
(=망치와 도끼를 교환하려 할 때 대치하고 있는 상황이라 생각하면 편하다.)
작업이 분리되어 코드가 간결해진다 각 쓰레드가 효율적으로 고르게 실행될 수 있게 해야 한다.
= 기아(굶어 죽는 것을 의미한다고 생각하면 된다.)
= 여러 모로 좋다. = 프로그래밍 할 때 고려해야 할 사항들이 많다.
  • 대부분의 프로그램들이 멀티쓰레드로 작성되어 있다.
  • 그러나 멀티쓰레드 프로그램이 장점만 있는 것은 아니다.