Offcanvas
Some text as placeholder. In real life you can have the elements you have chosen. Like, text, images, lists, etc.
Offcanvas
1111Some text as placeholder. In real life you can have the elements you have chosen. Like, text, images, lists, etc.

동시성

자바 동시성에 대한 새로운 접근 ‘가상 쓰레드’

자바 19에서 가장 눈에 띄는 변화는 가상 쓰레드다. 가상 쓰레드는 '프로젝트 룸(Project Loom)’의 일부로 개발됐으며, 자바 19에서 프리뷰 형태로 공개된다.     가상 쓰레드의 작동 방식  가상 쓰레드는 운영체제 프로세스와 애플리케이션 수준 동시성 사이에 추상화 계층을 생성한다. 다르게 말하면, 가상 쓰레드를 사용해 자바 가상 머신이 조율하는 작업을 스케줄링할 수 있으며 JVM은 운영체제와 프로그램 사이에서 중재하는 역할을 한다. 다음 그림은 가상 쓰레드의 아키텍처를 보여준다.   이런 아키텍처에서 애플리케이션은 가상 쓰레드를 인스턴스화하고 JVM(Java Virtual Machine)은 이를 처리할 컴퓨팅 리소스를 할당한다. 이와 대조되는 전통적인 쓰레드의 경우 운영체제(OS) 프로세스에 직접 매핑된다. 전통적인 쓰레드에서는 애플리케이션 코드가 OS 리소스의 준비와 제공을 담당한다. 가상 쓰레드에서는 애플리케이션 가상 쓰레드를 인스턴스화고 따라서 동시성의 필요성을 표현한다. 그러나 운영체제에서 리소스를 획득하고 해제하는 것은 JVM이다. 자바의 가상 쓰레드는 고(Go) 언어의 고루틴(goroutine)과 비슷하다. 가상 쓰레드를 사용할 때 JVM은 애플리케이션의 가상 쓰레드가 파킹된 경우, 즉 유휴 상태이자 새 작업을 대기할 때만 컴퓨팅 리소스를 할당할 수 있다. 이런 유휴 상태는 대부분의 서버에서 흔히 일어난다. 요청에 쓰레드를 할당한 다음 유휴 상태가 되어 데이터 스토어로부터의 응답, 네트워크로부터의 추가 입력과 같은 새 이벤트를 대기한다.  전통적인 자바 쓰레드를 사용하는 경우, 서버가 요청을 대기하는 유휴 상태면 운영체제 쓰레드도 유휴 상태이며 이는 서버의 확장성을 심각하게 저해한다. 오라클의 디벨로퍼 애드보킷 니콜라이 파로그는 “운영체제는 플랫폼 쓰레드의 효율성을 높일 수 없지만 JDK는 자체 쓰레드와 OS 쓰레드 사이에 일 대 일 관계를 설정해서 쓰레드를 더 효과적으로 활용할 수...

자바19 가상스레드 동시성 2022.11.07

러스트 언어를 좋아하는 이유, 그리고 싫어하는 이유 7가지

요즘은 매일 새로운 프로그래밍 언어가 만들어지는 것 같다. 대부분 소프트웨어 개발자에게 필요한 이상으로 많은 프로그래밍 언어가 있다. 프로그래머는 번뜩이는 천재성으로 새롭고 멋진 뭔가를 만들기 시작한다. 그러나 많은 경우 틈새 언어가 되어 한 가지 고충이나 특정 문제를 해결하는 데 사용된다. 새 프로그래밍 언어가 주류로 올라서서 광범위하게 사용되는 경우는 극히 드물다.    러스트(Rust)는 새로운 언어 중에서 개발자가 실제 엔터프라이즈 프로덕션에서 실행되는 코드를 작성하는 수준까지 성장한, 매우 드문 사례 중 하나다. 확실히 러스트는 틈새 언어다. 러스트의 목표는 시스템 프로그래머를 비롯해 수십, 수천, 심지어 수십만 건의 이벤트를 동시에 처리하는 코드를 만들고자 하는 사람에게 유용한 언어가 되는 것이다. 이와 같은 시스템을 만드는 것 자체도 어렵고 시스템에서 버그를 찾아 수정하기는 더 어렵다. 러스트는 시스템을 만들기 위한 최선의 방법에 관한 심층적이고 이론적인 온갖 사고를 살아 숨쉬는 실제 언어로 바꿔준다.  러스트 코어팀은 매년 개발자 설문을 실시한다. 2021년에는 최초로 모든 러스트 프로그래머의 절반 이상이 실무에서 러스트를 사용한다는 설문 결과가 나왔다. 더 이상 취미가 아니라 사용자가 실행할 전문적인 코드를 생산하는 데 사용하고 있다는 의미다.  개발자가 러스트를 사용한 프로그래밍에서 좋아하는 점과 싫어하는 점을 살펴보자.    좋아하는 이유 1. 규모와 동시성이 뛰어나다  개발자가 규모와 동시성 문제, 즉 많은 소스로부터 동시에 들어오는 입력을 처리하기 위한 요구사항에 대처하는 과정에서 소프트웨어의 복잡성은 높아졌다. 이 때문에 많은 개발자가 러스트를 오늘날의 아키텍처에 적합한 툴을 만들기 위한 최선의 언어로 생각한다.  높은 확장성이 필요한 애플리케이션의 대표적인 예로 웹 브라우저가 있다. 그렇게 보면 파이어폭스를 개발한 모질라에서 러스트가 탄생했다는 사실도 놀...

러스트 개발언어 컴파일러 2022.10.12

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

오픈JDK(OpenJDK) 커뮤니티에서 인큐베이션 중인 새로운 제안 ‘구조화된 동시성(JEP 428: Structured Concurrency)’은 서로 다른 자바 스레드에서 실행되는 여러 작업을 단일 작업 단위로 처리한다.  현재 오픈JDK 커뮤니티에서 인큐베이팅하고 있는 계획으로 멀티스레드 프로그래밍이 더 쉬워질 예정이다. ‘구조화된 동시성’ 제안은 서로 다른 스레드에서 실행되는 여러 작업을 단일 작업 단위로 처리하는 라이브러리를 도입한다. 해당 제안에 따르면 새 라이브러리는 오류 처리 및 취소를 간소화하고, 안정성을 개선하며, 관찰 가능성을 향상시킨다.    이 제안의 목표는 멀티스레드 코드의 안정성과 관찰 가능성을 개선하는 것, 그리고 취소 및 종료로 발생하는 일반적인 위험(예: 스레드 유출 및 취소 지연 등)을 제거할 수 있는 동시 프로그래밍 스타일을 촉진하는 것이다. 현시점에서 구조화된 동시성 제안은 특정 버전의 자바를 대상으로 하지는 않는다.  제안에 따르면, 구조화된 동시성은 단일 스레드 코드 개발자가 다뤄야 하는 가독성 및 유지관리를 위한 멀티스레드 프로그래밍 접근 방식이다. 이는 작업이 동시 하위 작업으로 분할되면 모두 같은 위치, 즉 작업의 코드 블록으로 돌아간다는 원칙을 따른다. 동일한 코드 블록으로 돌아가면 동시 하위 작업의 수명은 구문 블록으로 제한된다. 형제 하위 작업이 동일한 블록에 국한되기 때문에 하나의 단위로 추론하고 관리할 수 있다. 하위 작업은 결과를 기다리고 실패를 모니터링하는 작업(외부 블록의 코드)을 대신하여 작동한다.  단일 스레드 코드를 지원하는 구조화된 프로그래밍 기술과 마찬가지로 멀티스레드를 지원하는 구조화된 동시성은 2가지 아이디어에서 비롯된다. (1) 코드 블록을 통한 실행 흐름에서 잘 정의된 진입점 및 종료점 그리고 (2) 코드 중첩을 미러링하는 방식으로 작업 수명을 엄격하게 중첩하는 것이다. 또한 런타임에서 구조화된 동시성은 동일한 상위 작업이 가지고 ...

자바 오픈JDK JEP 2022.05.23

IDG 설문조사

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

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

Copyright © 2022 International Data Group. All rights reserved.