JAVA

Thread 개념 완벽하게 이해하기

Thread 개념 완벽하게 이해하기

Thread가 하는 일

Thread는 타임슬라이싱(Time Slicing)하여 문맥교환(Context Switching)을 수행하면서 CPU에게 여러개의 일을 동시에 하도록 만드는 일을 한다.

타임슬라이싱(Time Slicing) : 몇 초 단위로 쪼개는 것

상자 색칠하기

  1. RPReplay_Final1630711696


 

Thread의 장점

사람이 하면 효율이 매우 떨어져 보이는 이 작업을 컴퓨터가 하면 매우 빠른 속도로 할 수 있다. 사람들 눈에는 동시에 진행되는 것처럼 보이기 때문에 사용자 경험(UX)을 좋게 한다는 장점이 있다.

Thread의 한계

한명의 클라이언트가 요청을 할 때 Thread를 하나 만들어 주도록 코딩을 하면 다른 클라이언트의 요청이 동시에 들어왔을 때 대기하지 않고 접근할 수 있게 된다. 하지만 수천명의 클라이언트가 요청을 하게 되면 그만큼 Thread를 많이 만들게 된다. 데이터베이스까지 접근하게 되면 Thread를 수 없이 많이 만들어야 하는데 이렇게 되면 메모리를 많이 차지하게 되는 문제가 생긴다.

Thread의 한계 극복

그래서 Scale up(수직적 확장) / Scale out(수평적 확장) 두 가지 방법으로 이 문제를 해결할 수 있다. Scale up은 컴퓨터의 성능을 업그레이드 하는 것이고 Scale out은 컴퓨터를 여러대 사용하여 분산시키는 방법이다.

기업에서는 Thread Pool이라는 기술을 사용하여 CPU가 풀가동되도록 만들어 통신 속도를 빠르게 만든다. 사이트의 동시접속사 수를 통계 내서 Thread를 상시 가동시키는 방법이다. 이렇게 만들면  Blocking I/O를 하지 않아도 되기 때문이다.

Blocking I/O

I/O 작업이 진행되는 동안 유저 프로세스는 자신의 작업을 중단한 채 대기하는 방식이다.

하지만 동시 접속사 수를 통계내는데 있어 한계가 있다. 그래서 등장한 것이 L4장비(라우터)를 설치해서 Thread를 나누는 방법이다. 이때 클라이언트가 재요청시에 초기 요청과 다른 Thread를 만나면 Session에 있는 유저의 정보를 찾을 수 없게 되는데 두 가지 해결 방법이 있다. 하나는 서로 다른 Session을 공유하는 방법이고 또 하나는 클라이언트가 한번 사용한 Thread를 연속해서 사용하게 만드는 스티키가 있다. 하지만 이 방법들은 부하가 걸리기 쉽고 조작하기가 어려워 Session의 한계라고 여긴다.

최신글