Julia팀은 Julia 버전 1.3.0의 초기 미리보기인 v1.3.0의 알파 릴리스를 23일 발표했다.
알파 릴리스에는 멀티스레드(multi-threaded task)라고 하는 Julia 프로그램을 위한 새로운 스레딩 인터페이스의 미리보기가 포함되었다.
작업 병렬 처리 모델(The task parallelism model)은 실행을 위해 여러 프로그램을 병렬로 표시 할 수 있다. 여기서'작업'은 사용 가능한 스레드에서 동시에 모든 코드를 실행한다. 이 기능은 사용자가 수백만개의 작업을 자유롭게 배포 할 수 있고 라이브러리 구현 방법에 대해 걱정할 필요가 없으므로 GC 모델(가비지 수집)과 유사하게 작동한다. 이 휴대용 모델은 모든 Julia 패키지에 포함되었다.
다중 스레드 작업 병렬 처리로 Julia 모델은 라이브러리 함수를 호출하는 많은 병렬 작업을 스케줄 할 수 있다. CPU가 스레드로 가득 채워지지 않아 원활하게 작동한다. 이는 라이브러리 기능이 빈번히 필요하기 때문에 고급 언어의 중요한 기능으로 작용한다.
작업 병렬 처리를 구현하면서 문제를 해결하는 방법
각 작업에는 Unix 운영 체제에서 제공하는 일반적인 프로세스나 스레드 스택과는 다른 자체 실행 스택이 필요하다. Julia는 태스크가 전환될 때 메모리에 대한 시간을 교환하는 스택 스위칭의 대체 구현을 제공한다. 그러나 cfunction을 사용하는 외부 코드와 호환되지 않을 수 있다. 스택이 큰 주소 공간을 소비 할때 이 구현이 사용된다.
스레드를 깨우기 위해 이벤트 루프 스레드를 필요로 하면 스레드는 비동기 신호를 발행한다. 이는 새 작업을 예약하는 다른 스레드나 가비지 수집을 실행하기 시작한 스레드 또는 I / O를 수행하기 위해 I / O 잠금을 수행하려는 스레드 때문일 수 있다.
일반적으로 작업은 한 스레드에서 실행되고 잠시동안 블록된 다른 스레드에서 다시 시작될 수 있다. Julia는 메모리가 내부적으로 할당 될 때마다 스레드 로컬 변수를 사용한다. 현재 작업은 항상 처음에 실행을 시작한 스레드에서 실행된다. 이를 지원하기 위해 Julia는 주어진 스레드와 각 스레드와 관련된 작업을 실행하기 위한 스레드 단위의 대기열에서 작업을 실행해야 하는 고정 작업이라는 개념을 사용하고 있다.
CPU 사용을 100% 방지하기 위해 일부 작업이 슬립상태로 설정된다. 다른 스레드가 슬립상태에 있는 동안 일부 스레드는 새작업에 대해 예약 될 수 있으므로 동기화 문제가 발생할 수 있다.
작업이 차단되면 다른 작업을 선택하기 위해 스케줄러가 호출된다. 그러나 코드가 실행되는 스택은 전용 스케줄러 태스크를 가질 수 있다. 그러나 스케줄러 코드가 최근에 차단된 작업의 컨텍스트에서 실행되는 경우 오버헤드가 줄어들 수 있다. 한가지 제안된 방법은 전환을 피하기 위해 스케줄러 대기열에서 작업을 끌어내는 것이다.
Julia 팀은 멀티 스레드 기능을 구현하는 동안 많은 어려운 버그에 직면했었다. 많은 버그 중 하나가 Windows에서 하나의 비트를 뒤집어서 고쳐진 신비한 것이었다.
많은 사용자가 Julia가 앞으로 Python 에 도전 할 것으로 기대 하고 있다.
해커뉴스 사용자는 "저는 python / bash / R이 많은 전산 생물 물리학 분야에서 일했으며 Julia에서 고성능 코드를 많이 작성한 유일한 사람이었습니다. 사람들은 언어에 대해 호기심을 갖고 있었지만 아직도 많이 알려지지 않았습니다. 우리는 앞으로 Julia를 더 많이 채택 할 수 있기를 기대합니다"고 말했다.
한편 Julia의 이번 버전은 몇 달 후에 출시 될 예정이다.
[ⓒ CWN(CHANGE WITH NEWS). 무단전재-재배포 금지]