전체 글

나와 더불어 성장할 개발새발 블로그
Language/Java

[Java] Virtual Thread 부셔보기

개요 - 기존 스레드의 한계Java의 전통적인 동시성 모델은 Thread per Request 모델로 요청에 대해 하나의 스레드를 할당한다. 해당 요청 처리가 끝날 때 까지 스레드가 점유된다. 문제는 JVM의 스레드(Platform Thread)는 OS 스레드와 1:1로 매핑되며, 스레드 당 메모리를 1~2MB 점유하므로 비용이 비싸다.서버의 자원은 한정되어 있기에 요청이 늘어난다고 해도, 수천 개 이상의 스레드를 생성하기에는 한계가 있다.또한 JVM의 스레드는 I/O 블로킹이 발생하면, 작업이 완료될 때까지 다른 요청을 처리할 수 없다. 동시 요청이 스레드 풀 크기를 초과하게 되면 나머지 요청은 대기할 수 밖에 없고 병목이 될 수 있다. Virtual Thread는 이러한 한계를 극복하고 처리량을 늘릴..

Language/Java

[Java] Callable과 Future & CompletableFuture

개요자바는 스레드를 통해 작업들을 병렬적으로 처리할 수 있다.하지만 Runnable 인터페이스를 통해 작업을 제출하게 되면, 반환값을 받을 수 없다는 단점이 있다.Executor 프레임워크는 이러한 문제를 해결하기 위해 Callable과 Future라는 인터페이스를 도입했다. 이전 글에 이어지는 내용이다. Runnable vs Callablepublic interface Runnable { void run();}Runnable 인터페이스는 반환 값이 없으며, 예외를 던질 수도 없다. public interface Callable { V call() throws Exception;}Callable 인터페이스는 값을 반환할 수 있으며, 예외를 던질 수 있다. Callable과 Future 사용class ..

Language/Java

[Java] 자바 스레드 풀과 ExecutorService

개요스레드 생성 과정은 간략하게 아래와 같은 과정이 이루어진다.메모리 할당 -> 시스템 콜(커널 모드 전환) -> 운영체제에서 스레드 생성 -> 운영체제 스케쥴러 관리 -> 작업이 완료되면 스레드 종료스레드 생성 과정은 너무 무겁다.또한 서버의 자원은 한정되어 있기에, 스레드를 무한하게 생성할 수도 없다. 스레드 풀을 이용하면 스레드들을 미리 만들어서 보관해놓고 생성 과정을 일부 생략하여 작업을 빠르게 진행시킬 수 있으며, 최대 스레드 수를 설정하여 서버의 자원을 초과하지 않도록 할 수 있다. Executor 프레임워크자바에서는 Executor 프레임워크를 통해 스레드 풀 관리를 간단하고 효율적으로 처리할 수 있다. public interface ExecutorService extends Execut..

kkang._.h00n
깡훈인뎁쇼