자바(SE)
-
이번 포스트에서는 JDK21에 추가된 Virtual Thread에 대해 살펴보자. Virtual Thread? 기존의 스레드의 동작 방식자바에는 이미 잘 동작하는 스레드가 있는데 구지 Virtual Thread(V.T)가 필요했던 이유는 무엇일까? V.T의 필요성을 이해하기 위해서는 먼저 기존 스레드의 동작을 살펴볼 필요가 있다.일단 스레드는 기본적으로 OS의 자산이다. 자바께 아니다. Java에서 스레드를 사용할 때는 OS의 스레드와 1:1로 통신할 수 있는 스레드를 만들어서 사용한다. 이를 플랫폼 스레드(Platform Thread:P.T)라고 부른다. 그러다 보니 스레드의 주도권은 OS에 있다. 자바에서 스레드로 뭔가를 하려고 하면 OS와 소통해야 한다는 말이다.기존의 Thread의 문제점과 V..
Virtual Thread이번 포스트에서는 JDK21에 추가된 Virtual Thread에 대해 살펴보자. Virtual Thread? 기존의 스레드의 동작 방식자바에는 이미 잘 동작하는 스레드가 있는데 구지 Virtual Thread(V.T)가 필요했던 이유는 무엇일까? V.T의 필요성을 이해하기 위해서는 먼저 기존 스레드의 동작을 살펴볼 필요가 있다.일단 스레드는 기본적으로 OS의 자산이다. 자바께 아니다. Java에서 스레드를 사용할 때는 OS의 스레드와 1:1로 통신할 수 있는 스레드를 만들어서 사용한다. 이를 플랫폼 스레드(Platform Thread:P.T)라고 부른다. 그러다 보니 스레드의 주도권은 OS에 있다. 자바에서 스레드로 뭔가를 하려고 하면 OS와 소통해야 한다는 말이다.기존의 Thread의 문제점과 V..
2024.09.21 -
JDK18 ~ JDK20은 STS로 확정된 기능이 거의 없이 지나갔다. 드디어 2023년 9월 19일 LTS인 JDK21이 다양한 기능을 포함하고 발표되었다. 문법적인 변화 JEP 441: Pattern Matching for switch이제 switch case 문장에서 단순한 값 뿐 아니라 타입, null 여부까지 판단할 수 있게 되었다. 여기서 패턴이라 특정한 형태나 구조를 가진 데이터를 찾아내기 위한 개념으로 생각할 수 있다. 기존의 switch 문장이 int, String 등으로 단순히 값이 같은지를 비교했다면 이제 Object를 파라미터로 받아서 타입 기반으로 처리하거나 when 키워드를 이용해서 조건을 추가할 수도 있게 되었다.// if 문을 이용한 타입 확인 및 활용static Str..
[JDK] 버전별 특징 - JDK21JDK18 ~ JDK20은 STS로 확정된 기능이 거의 없이 지나갔다. 드디어 2023년 9월 19일 LTS인 JDK21이 다양한 기능을 포함하고 발표되었다. 문법적인 변화 JEP 441: Pattern Matching for switch이제 switch case 문장에서 단순한 값 뿐 아니라 타입, null 여부까지 판단할 수 있게 되었다. 여기서 패턴이라 특정한 형태나 구조를 가진 데이터를 찾아내기 위한 개념으로 생각할 수 있다. 기존의 switch 문장이 int, String 등으로 단순히 값이 같은지를 비교했다면 이제 Object를 파라미터로 받아서 타입 기반으로 처리하거나 when 키워드를 이용해서 조건을 추가할 수도 있게 되었다.// if 문을 이용한 타입 확인 및 활용static Str..
2024.09.20 -
이번 포스트에서는 스트림의 병렬 처리에 대해 살펴보자. 병렬 처리 동시성(Concurrency)와 병렬성(Parallelism)스레드를 사용하다 보면 은근 헷갈리게 사용하는 용어가 동시성과 병렬성이라는 개념인데 둘의 목적이 살짝 다르다.동시성은 여러 작업들이 동시에 실행되는 것처럼 보이도록 하는 개념이다. 한 사람이 요리를 하면서 동시에 라디오도 듣고, 전화 통화도 한다. 사실 여러 작업을 동시에 하는 것 처럼 보이지만 매우 빠르게 작업을 전환하면서 진행하는 것이다. 동시성의 목적은 시스템의 자원을 효율적으로 사용하기 위한 것으로 일반적으로 Thread를 만들어서 동작 시키는 것은 동시성을 위한 행위이다.반면 병렬성은 실제로 여러 작업들이 동시에 진행되는 것이다. 어떤 사람은 요리를 하고 어떤 사람..
[Stream] 스트림의 병렬 처리이번 포스트에서는 스트림의 병렬 처리에 대해 살펴보자. 병렬 처리 동시성(Concurrency)와 병렬성(Parallelism)스레드를 사용하다 보면 은근 헷갈리게 사용하는 용어가 동시성과 병렬성이라는 개념인데 둘의 목적이 살짝 다르다.동시성은 여러 작업들이 동시에 실행되는 것처럼 보이도록 하는 개념이다. 한 사람이 요리를 하면서 동시에 라디오도 듣고, 전화 통화도 한다. 사실 여러 작업을 동시에 하는 것 처럼 보이지만 매우 빠르게 작업을 전환하면서 진행하는 것이다. 동시성의 목적은 시스템의 자원을 효율적으로 사용하기 위한 것으로 일반적으로 Thread를 만들어서 동작 시키는 것은 동시성을 위한 행위이다.반면 병렬성은 실제로 여러 작업들이 동시에 진행되는 것이다. 어떤 사람은 요리를 하고 어떤 사람..
2024.07.08 -
이번 포스트에서는 스레드 폭증에 따른 애플리케이션 성능 저하를 막기 위한 스레드 풀에 대해 살펴보자. 스레드 풀 스레드 풀(Thread Pool)본격적으로 멀티 스레드르 사용하다 보면 많은 스레드의 생성/소멸에 따라 메모리 사용이 늘어나고 스케줄링 관리 등 해야할 일들이 많다보니 CPU도 바빠지는 등 애플리케이션 성능에 악영향을 끼치게 된다. 이럴 때 스레드를 한번 쓰고 버리는 것이 아니고 재사용할 수 있다면 어떨까? 이를 위해 스레드 풀이라는 개념이 사용된다.기존에는 Thread와 스레드에서 처리할 작업(Runnable)을 하나로 만들었다면 스레드 풀에서는 둘이 분리되서 관리된다. 스레드 풀은 미리 만들어서 재사용하는 N개의 스레드와 스레드에서 처리할 작업 큐로 구성된다.원하는 개수만큼의 스레드를..
[Thread] 05. 스레드 풀이번 포스트에서는 스레드 폭증에 따른 애플리케이션 성능 저하를 막기 위한 스레드 풀에 대해 살펴보자. 스레드 풀 스레드 풀(Thread Pool)본격적으로 멀티 스레드르 사용하다 보면 많은 스레드의 생성/소멸에 따라 메모리 사용이 늘어나고 스케줄링 관리 등 해야할 일들이 많다보니 CPU도 바빠지는 등 애플리케이션 성능에 악영향을 끼치게 된다. 이럴 때 스레드를 한번 쓰고 버리는 것이 아니고 재사용할 수 있다면 어떨까? 이를 위해 스레드 풀이라는 개념이 사용된다.기존에는 Thread와 스레드에서 처리할 작업(Runnable)을 하나로 만들었다면 스레드 풀에서는 둘이 분리되서 관리된다. 스레드 풀은 미리 만들어서 재사용하는 N개의 스레드와 스레드에서 처리할 작업 큐로 구성된다.원하는 개수만큼의 스레드를..
2024.07.07 -
이번 포스트에서는 멀티 스레드 환경에서 스레드 안전한(thread safe) 컬렉션 사용에 대해 살펴보자. 스레드와 Collection Thread Safe or Not!구 버전(JDK 1.2 이전)의 collection들인 Vector, Hashtable들은 이미 모든 메서드에 synchronized가 선언되어 있다. 따라서 매서드 실행 시마다 lock을 확인하는 절차가 필요하고 한 번에 하나의 스레드만 동작할 것이고 덕분에 멀티 스레드 환경에 안전하다. 하지만 성능의 문제가 발생할 수 밖에 없다. 만약 싱글 스레드 환경에서 이들을 썼다면 장점은 없고 단점만 남을 것이다.JDK 1.2 이후에는 이들의 개선 버전으로 ArrayList, HashMap을 사용한다. 이들은 synchronized가 없다...
[Thread] 04. 멀티 스레드와 Collection이번 포스트에서는 멀티 스레드 환경에서 스레드 안전한(thread safe) 컬렉션 사용에 대해 살펴보자. 스레드와 Collection Thread Safe or Not!구 버전(JDK 1.2 이전)의 collection들인 Vector, Hashtable들은 이미 모든 메서드에 synchronized가 선언되어 있다. 따라서 매서드 실행 시마다 lock을 확인하는 절차가 필요하고 한 번에 하나의 스레드만 동작할 것이고 덕분에 멀티 스레드 환경에 안전하다. 하지만 성능의 문제가 발생할 수 밖에 없다. 만약 싱글 스레드 환경에서 이들을 썼다면 장점은 없고 단점만 남을 것이다.JDK 1.2 이후에는 이들의 개선 버전으로 ArrayList, HashMap을 사용한다. 이들은 synchronized가 없다...
2024.07.06 -
이번 포스트에서는 스레드의 장점 중 하나인 데이터의 공유와 이와 연관된 동기화 문제를 살펴보자. 데이터 공유와 동기화 데이터 공유멀티 스레드 프로그램의 장점 중 하나는 힙의 데이터를 공유한다는 점이다. 다음의 그림은 Account 라는 객체를 출금 스레드 2개와 입금 스레드 2개가 공유하고 있는 모습을 보여준다. 4개의 Account를 만들 필요 없이 하나의 객체가 사용되므로 효율적일 수 있다. 출금을 위한 뱅킹 시스템Account 객체는 잔금인 balance와 출금, 입금을 위한 withdraw, deposite 메서드를 갖는다. 문제는 출금 과정이 복잡해서 주토피아에 나오는 나무늘보처럼 살짝 느리게 동작한다고 생각해보자.package ch14.banking;public class Account {..
[Thread] 03.데이터의 공유와 동기화이번 포스트에서는 스레드의 장점 중 하나인 데이터의 공유와 이와 연관된 동기화 문제를 살펴보자. 데이터 공유와 동기화 데이터 공유멀티 스레드 프로그램의 장점 중 하나는 힙의 데이터를 공유한다는 점이다. 다음의 그림은 Account 라는 객체를 출금 스레드 2개와 입금 스레드 2개가 공유하고 있는 모습을 보여준다. 4개의 Account를 만들 필요 없이 하나의 객체가 사용되므로 효율적일 수 있다. 출금을 위한 뱅킹 시스템Account 객체는 잔금인 balance와 출금, 입금을 위한 withdraw, deposite 메서드를 갖는다. 문제는 출금 과정이 복잡해서 주토피아에 나오는 나무늘보처럼 살짝 느리게 동작한다고 생각해보자.package ch14.banking;public class Account {..
2024.07.05 -
망아지 같은 스레드를 잘 사용하기 위해서는 그들의 상태를 잘 이해하고 제어해야 한다. 스레드의 우선 순위와 상태 스레드의 우선순위멀티스레드 환경에서 프로그램의 효율성과 안정성을 보장하기 위해서는 스레드의 우선순위와 상태 제어가 필수적이다.스레드의 우선순위는 스레드가 CPU 시간을 얼마나 많이 할당받을 수 있을지를 결정하는 역할을 수행한다. 우선순위가 높은 스레드는 우선 순위가 낮은 스레드보다 더 자주 실행될 "가능성"이 크다. 다음과 같은 상황을 고민해보자.메신저를 쓰면서 파일 전송이 좀 느릴 수는 있지만 채팅이 전달 안되는것은 참기 어렵다.사용자 UI를 담당하는 스레드는 빠른 응답성을 위해 높은 우선순위를 부여한다.G.C를 담당하는 스레드는 평소에는 낮은 우선순위를 가지다가 메모리 부족 등 급박한 ..
[Thread] 02. Thread의 상태와 제어망아지 같은 스레드를 잘 사용하기 위해서는 그들의 상태를 잘 이해하고 제어해야 한다. 스레드의 우선 순위와 상태 스레드의 우선순위멀티스레드 환경에서 프로그램의 효율성과 안정성을 보장하기 위해서는 스레드의 우선순위와 상태 제어가 필수적이다.스레드의 우선순위는 스레드가 CPU 시간을 얼마나 많이 할당받을 수 있을지를 결정하는 역할을 수행한다. 우선순위가 높은 스레드는 우선 순위가 낮은 스레드보다 더 자주 실행될 "가능성"이 크다. 다음과 같은 상황을 고민해보자.메신저를 쓰면서 파일 전송이 좀 느릴 수는 있지만 채팅이 전달 안되는것은 참기 어렵다.사용자 UI를 담당하는 스레드는 빠른 응답성을 위해 높은 우선순위를 부여한다.G.C를 담당하는 스레드는 평소에는 낮은 우선순위를 가지다가 메모리 부족 등 급박한 ..
2024.07.04 -
이번 포스트에서는 multi thread의 개념에 대해 살펴보자. Process와 Thread ProcessThread를 알기 위해서는 먼저 Process에 대해서 알아야 한다.Process란 실행중인 프로그램 자체를 생각하면 된다. Eclipse같은 IDE, 지금 사용중인 Browser, 문서 편집을 위한 Word 등이 모두 Process다. Process는 프로그램 실행에 필요한 모든 데이터, 메모리 등 자원과 thread로 구성된다.그럼 Multi Process란 뭘까? 이는 동시에 여러 개의 프로세스를 실행시키는 것이다. 음악을 들으면서 Eclipse로 작업 하는 것이 대표적인 Multi Process 환경이다. 우리가 사용하는 OS들은 대부분 Multi Process를 지원한다.이때 실행되는..
[Thread] 01. Multi Thread 개념이번 포스트에서는 multi thread의 개념에 대해 살펴보자. Process와 Thread ProcessThread를 알기 위해서는 먼저 Process에 대해서 알아야 한다.Process란 실행중인 프로그램 자체를 생각하면 된다. Eclipse같은 IDE, 지금 사용중인 Browser, 문서 편집을 위한 Word 등이 모두 Process다. Process는 프로그램 실행에 필요한 모든 데이터, 메모리 등 자원과 thread로 구성된다.그럼 Multi Process란 뭘까? 이는 동시에 여러 개의 프로세스를 실행시키는 것이다. 음악을 들으면서 Eclipse로 작업 하는 것이 대표적인 Multi Process 환경이다. 우리가 사용하는 OS들은 대부분 Multi Process를 지원한다.이때 실행되는..
2024.07.03