개발자

“자바 동시성, 더 쉬워진다” 새 오픈JDK 제안 

Paul Krill | InfoWorld 2022.05.23
오픈JDK(OpenJDK) 커뮤니티에서 인큐베이션 중인 새로운 제안 ‘구조화된 동시성(JEP 428: Structured Concurrency)’은 서로 다른 자바 스레드에서 실행되는 여러 작업을 단일 작업 단위로 처리한다. 

현재 오픈JDK 커뮤니티에서 인큐베이팅하고 있는 계획으로 멀티스레드 프로그래밍이 더 쉬워질 예정이다. ‘구조화된 동시성’ 제안은 서로 다른 스레드에서 실행되는 여러 작업을 단일 작업 단위로 처리하는 라이브러리를 도입한다. 해당 제안에 따르면 새 라이브러리는 오류 처리 및 취소를 간소화하고, 안정성을 개선하며, 관찰 가능성을 향상시킨다. 
 
ⓒ Getty Images Bank

이 제안의 목표는 멀티스레드 코드의 안정성과 관찰 가능성을 개선하는 것, 그리고 취소 및 종료로 발생하는 일반적인 위험(예: 스레드 유출 및 취소 지연 등)을 제거할 수 있는 동시 프로그래밍 스타일을 촉진하는 것이다. 현시점에서 구조화된 동시성 제안은 특정 버전의 자바를 대상으로 하지는 않는다. 

제안에 따르면, 구조화된 동시성은 단일 스레드 코드 개발자가 다뤄야 하는 가독성 및 유지관리를 위한 멀티스레드 프로그래밍 접근 방식이다. 이는 작업이 동시 하위 작업으로 분할되면 모두 같은 위치, 즉 작업의 코드 블록으로 돌아간다는 원칙을 따른다. 동일한 코드 블록으로 돌아가면 동시 하위 작업의 수명은 구문 블록으로 제한된다. 형제 하위 작업이 동일한 블록에 국한되기 때문에 하나의 단위로 추론하고 관리할 수 있다. 하위 작업은 결과를 기다리고 실패를 모니터링하는 작업(외부 블록의 코드)을 대신하여 작동한다. 

단일 스레드 코드를 지원하는 구조화된 프로그래밍 기술과 마찬가지로 멀티스레드를 지원하는 구조화된 동시성은 2가지 아이디어에서 비롯된다. (1) 코드 블록을 통한 실행 흐름에서 잘 정의된 진입점 및 종료점 그리고 (2) 코드 중첩을 미러링하는 방식으로 작업 수명을 엄격하게 중첩하는 것이다. 또한 런타임에서 구조화된 동시성은 동일한 상위 작업이 가지고 있는 형제 하위 작업과 함께 트리 모양의 작업 계층을 구축한다. 이 트리는 단일 스레드 호출 스택의 동시 대응물이다. 

구조화된 동시성은 JDK에서 제공하는 스레드의 경량 버전인 가상 스레드에 매우 적합하다(가상 스레드의 미리보기는 올해 9월 공개될 ‘자바 19’에서 계획돼 있다). 많은 가상 스레드가 동일한 OS 스레드를 공유하여 많은 수의 가상 스레드를 허용한다. 이를 통해 동시 동작 단위, 심지어 I/O 동작을 나타낼 수 있다. 따라서 서버 애플리케이션은 구조화된 동시성을 사용하여 수천 또는 수백 만개의 요청을 동시에 처리할 수 있다. 다시 말해, 가상 스레드는 풍부한 스레드를 제공하고, 구조화된 동시성은 스레드가 정확하게 조정되도록 지원한다. 서버 측 개발자를 위한 유지관리 가능성과 안정성이 제공된다는 의미다. 

한편 이 제안은 동시성 구성(예: java.util.concurrent)을 대체하거나 자바용으로 구조화된 최종 동시성 API를 제공하진 않는다. 아울러 스레드 간 데이터 스트림을 공유하는 메커니즘, 기존 스레드 중단 메커니즘을 새 스레드 취소 메커니즘으로 교체하는 것도 이 제안의 목표는 아니지만 향후 JEP에서 해결될 수 있다고 밝혔다.
ciokr@idg.co.kr

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.