Java Reflection & Reflection API Entrypoint
·
📘 Backend/Reflection
📚 Reflection이란?Java Reflection이란 짧게 요약하면 런타임 중, 어플리케이션의 클래스 및 객체에 관련된 정보에 액세스 할 수 있게 해주는 언어이자 JVM의 기능 입니다.보통의 프로그램은 실행 시 Input을 받아 Output을 반환합니다.반대로 Reflection으로 프로그램 작성 시 Input과 내부 소스 로직을 모두 입력값으로 간주해 그걸 분석하고 Output을 반환합니다.위 이유로 인해 Reflection을 이용하면 강력한 라이브러리,프레임워크,소프트웨어를 설계 할 수 있습니다.Java Reflection은 언어이자 JVM의 기능 중 하나이며, 런타임 시 classes와 objects를 추출할 수 있습니다.Reflection API를 통해 다양한 소프트웨어를 Flexible하..
Virtual Thread
·
📘 Backend/Concurrency
📚 Virtual ThreadJDK에 정식 도입된 Virtual 스레드는 기존의 KLT(kernel-level 스레드)와 ULT(user-level 스레드)를 1:1 매핑하여 사용하는 JVM의 스레드 모델을 개선한, 여러 개의 가상 스레드를 하나의 네이티브 스레드에 할당하여 사용하는 모델이며, 경량 스레드로, JDK 19에서 미리보기의 일부로 처음 공개 되었습니다. 가상 스레드는 OS 스레드에 비해 매우 적은 자원을 사용하여 수천 개의 스레드를 효율적으로 실행할 수 있도록 설계되었고,이를 통해 고성능 서버 애플리케이션이 더 높은 동시성을 쉽게 구현할 수 있으며, 전통적인 스레드 풀의 복잡한 설정 없이도 많은 작업을 동시에 처리할 수 있습니다.📚 Java Thread와 OS Thread와의 관계Java..
Thread-Per-Task Threading Model
·
📘 Backend/Concurrency
📚 Blocking I/O블로킹 방식의 I/O를 사용하는 어플리케이션에서 응답 시간이 긴 블로킹 I/O 연산이 포함되어 있다면, 아무리 많은 스레드를 생성하더라도 근본적으로 성능 문제가 발생할 수 있습니다.긴 블로킹 연산으로 인해, 스레드가 I/O 작업이 완료될 때까지 대기하면서 사용 가능한 CPU 코어가 점차 유휴 상태가 됩니다. 결과적으로, 이러한 블로킹 호출이 계속 발생하면 서버의 전체 성능이 저하되고 모든 요청 처리에 영향을 미치게 됩니다.이번 글에서는 블로킹 I/O 연산이 있어도 어플리케이션의 전체 성능을 최적화하기 위해 CPU 자원을 더 효과적으로 활용할 수 있는 다양한 방법들을 알아보았습니다.📚 Thread-Per-Task Threading Model(작업 단위 스레딩 모델)위에서 말했듯..
AtomicReference<T>를 이용한 Lock-Free Stack 구현
·
📘 Backend/Concurrency
📚 AtomicReference를 이용한 Lock-Free Stack 구현Lock-Free의 연장으로 멀티스레드 환경에서 Stack을 Lock-Free로 구현하는 방법을 작성합니다.구현 흐름은, 초기 데이터로 100,000개의 무작위 정수를 스택에 추가한 후, 여러 스레드가 동시에 push와 pop 작업을 수행합니다. 10초 후에 총 작업 수를 로그로 기록하여 스택의 동작 성능을 측정합니다. 이러한 과정을 통해 Lock을 사용하지 않고도 안전하게 멀티스레드 환경에서 동작하는 스택을 구현하는 방법을 배울 수 있습니다.StandardStack 클래스Lock을 사용하는 단일 스레드 환경에서 동작하는 스택으로, synchronized 키워드를 사용하여 push 메소드에 락을 걸어 안전한 접근을 보장합니다. 새..
Lock-Free Algorithm
·
📘 Backend/Concurrency
📚 Lock-Free AlgorithmLock-Free 알고리즘은 여러개의 Thread에서 동시 호출 시 정해진 단위 시간마다 적어도 1개의 호출이 완료되는 알고리즘이며, 동시성 제어에서 중요한 개념중 하나입니다.간단히 요약하면 Lock을 사용하지 않고 Atomic 연산을 통해 구현하며, 하드웨어 레벨에서 연산의 원자성을 보장합니다.유의할 점CAS(Compare And Set)를 사용하는 Atomic 클래스는 Thread 간 경합이 있을 때 성능이 다소 낮아질 수 있십니다.하지만 여전히 Lock을 사용하지 않기 때문에 Lock과 비교해 더 빠르고 데드락이 없는 Lock-Free 구현이 가능합니다.물론 Lock을 사용 하는게 더 좋다거나 사용 안한다고 더 좋다기 보다 상황에 맞게 선택할 수 있는 선택지를..