614 판독값
614 판독값

Asynchronous Runtimes: A Primer for the Perplexed 개발자

~에 의해 Oleg Efimov3m2024/04/04
Read on Terminal Reader
Read this story w/o Javascript

너무 오래; 읽다

이 입문서는 비동기 프로그래밍이 애플리케이션 성능, 확장성 및 응답성을 어떻게 높일 수 있는지 조명하는 것을 목표로 합니다. 비차단 작업과 이벤트 루프의 보편적인 원칙에 초점을 맞추어 AsyncIO, Node.js 또는 Go와 같은 특정 기술을 넘어선다.
featured image - Asynchronous Runtimes: A Primer for the Perplexed 개발자
Oleg Efimov HackerNoon profile picture
호기심과 전문적인 성장의 교차점에 있는 개발자를 위해 설계된 이 프리미어는 비동기 프로그래밍이 응용 프로그램 성능, 확장성 및 응답성을 높일 수 있는 방법을 밝히는 것을 목표로 합니다.By focusing on the universal principles of non-blocking operations and event loops, we venture beyond specific technologies such as AsyncIO, Node.js, or Go.



이 탐험은 기술적인 문법의 복잡성없이 현대 소프트웨어를 구동하는 효율성을 파악하려는 소프트웨어 개발자를 위해 만들어졌습니다.


단일 스레드 요청 처리 방법은 바쁜 도시에서 단일 라인 도로와 같습니다 : 각 요청은 자동차이며, 단일 라인이있을 때 차량이 일치하여 지연을 유발합니다.하지만 우리 도시 - 우리의 서비스 - 교통을 더 현명하게 관리 할 수 있다면 어떨까요? asynchronous runtime의 마법이 게임에 들어옵니다. 그것은 마치 우리의 도시에 지능형 교통 시스템을 추가하고 차량을 기다리지 않고 여러 라인과 교차로 안내하는 것과 같습니다.


이 시스템은 트래픽이 원활하게 흐르며 자동차 (또는 작업)가 너무 오래 기다리지 않도록 보장하며, 이는 비동기 실행 시간이 소프트웨어를 효율적으로 실행하는 방법입니다.


I/O 작업을 동시에 완료하는 서비스의 예를 살펴보자.For clarity, these operations are shown outside the main flow of execution in the diagram:

서비스의 시작 단계에서 I/O를 차단하는 것은 허용될 수 있지만 외부 요청을 처리할 때 이러한 접근법을 피하는 것이 좋습니다.The following diagram illustrates how service efficiency can be enhanced through adoption of non-blocking I/O operations:

이 예는 서버의 성능 향상이 극대화되는 시나리오를 강조합니다.그러나 차단되지 않는 작업의 이점은 들어오는 요청의 모든 주파수에서 지속됩니다.조차도 이상적인 조건에서는 전용 I/O 스레드를 처리 작업 흐름에 통합함으로써 성능 혜택이 있습니다.


요청을 처리하는 데 필요한 총 시간 (클라이언트의 초기 요청에서부터 오른쪽에 있는 파란 숫자에 의해 묘사된 최종 응답까지)은 모든 요청을 처리할 수 있는 충분한 스레드가 있는 한 항상 줄어들 것입니다.

다음에는 많은 개발자에게 반대되는 것처럼 보일 수 있는 관행에 직면할 수 있습니다.I/O 작업이 요청 처리 시간의 상당 부분을 차지할 때, 다른 코드 세그먼트를 최적화하면 약간의 개선이 발생할 수 있습니다.The duration to retrieve data from a cache might align closely with the time dedicated to business logic and template rendering.


캐시 또는 프로세스 내 데이터베이스를 사용하면 다른 처리 활동에 비해 데이터 검색 시간을 줄일 수 있습니다.


코드를 효과적으로 분할하고 콜백 실행을 촉진하려면 실행 시간을 다음 이벤트 루프주기에 진행하도록 지시할 수 있습니다.

// 기능 func1_cb(str, cb) 함수 func1_cb(str, cb) 함수 func2_cb(str, cb) 함수 func2_cb(str, cb) 함수 func2_cb(str, cb) 함수 func2_cb(str, cb) 함수 func1_cb(str, cb) 함수 function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function function// blocking callbacks
function func1_cb(str, cb) {
 var res = func1(str);
 cb(res);
}

function func2_cb(str, cb) {
 var res = func2(str);
 cb(res);
}

// non-blocking callbacks
function func1_cb(str, cb) {
 var res = func1(str);
 process.nextTick(function () {
   cb(res);
 });
}

function func2_cb(str, cb) {
 var res = func2(str);
 process.nextTick(function () {
   cb(res);
 });
}

// usage example
func1_cb(content, function (str) {
 func2_cb(str, function (result) {
   // work with result
 });
});

이 방법론을 채택하여 계산의 두 부분을 분할함으로써, 거의 동시에 요청이 도착하는 시나리오의 전체 처리 시간은 동일하게 유지됩니다.

이 시나리오는 "next tick" 전략을 사용하는 경우 최소한의 결과를 나타냅니다. 초기 예제에서 보여주는 바와 같이, "next tick" 방법은 희귀한 요청에 대해 유리한 것으로 입증됩니다. 요청이 적당한 속도로 도착하면이 기술을 활용하면 새 요청의 시작과 차단되지 않는 작업의 시작이 실행 휴식 중에 간섭 될 수있게함으로써 처리 속도를 향상시킵니다.이 접근 방식은 전체 처리 시간과 요청당 평균 시간을 효과적으로 줄입니다.

결론적으로, 차단되지 않는 I/O를 채택하는 것은 애플리케이션 성능을 향상시키는 데 중요하며, 소수 및 무거운 수신 요청 볼륨이 있는 환경에서 유익합니다.또한, "next tick" 기술과 유사한 개념으로 효율적으로 실행 흐름을 순서화하는 것은 서버 효율성을 크게 향상시킵니다.

이 비동기 프로그래밍 관행을 채택하면 전통적인 동기화 방법에 비해 명확한 장점을 제공합니다.


Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks