- 자바스크립트는 싱글 스레드 언어임에도 비동기 동작이 가능한 이유는 ?
- 자바스크립트 자체는 싱글 스레드로 동작하며 node도 마찬가지이지만, 자바스크립트가 동작할 때, 순수하게 자바스크립트만 동작시키는 상황은 많지 않으며 이벤트 루프, 콜 스택, 콜백 큐 webapi 등을 통해 동작하게 되어서 비동기적으로 처리가 될 수 있으며 이에 따라 non-blocking I/o와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가진다.
- 자바는 멀티스레드 기반 언어이다. 자바에서의 비동기 처리 방법은 ?
- Thread 클래스나 Runnable 인터페이스를 사용해서 스레드를 생성하고 실행할 수 있다.
- Future, Callable, CompletableFuture
- Reactive Programming.
- 근데 기본적으로 해당 기능들을 코드단에서 실행하지 않으면 단일 스레드로 동기적으로 실행할 것이다.
- 코루틴이란 ?
- 코틀린도 멀티스레드 기반 언어이며 코루틴을 통해 비동기 프로그래밍을 더욱 쉽게 할 수 있도록 한다.
- 비동기로 동작하는 것은 레벨에 따라 구분해서 볼 수 있을 것 같다.
- 가령 스프링 프레임워크를 예로 들었을 때, 멀티 쓰레드 기반으로 동작하며 각각의 쓰레드가 서로 간섭없이 이벤트를 처리하므로 쓰레드 레벨에서는 비동기로 동작을 한다고 볼 수 있다.
- 그러면 스프링프레임워크는 이미 비동기적으로 동작하고 있다고 생각되는데 spring webflux 어떤 차별화가 있는 것인가 ?
- spring framework는 멀티쓰레드 기반이지만 블로킹 i/o를 사용하여 동작했다. webflux는 non-blocking I/O를 사용하여 동작해서 동시에 더 많은 요청을 처리할 수 있으며 리소스 관리와 빠른 응답을 제공한다.
- 인터프리터 언어와 컴파일 언어의 차이
- 인터프리터와 컴파일러
- 비동기 처리란
- 비동기 처리는 말그대로 비동기적으로 동작하게 처리하는 것이다. async를 붙임으로써 간단하게 비동기 함수로 지정할 수 있다. 동작의 순서를 보장하기 위한 기능들에 대해서는 await을 사용할 수 있다.
- 비동기 처리방식의 가장 최근 방법은 async/await이다. async는 asyncnorous(비동기)의 약어 이며 해당 키워드가 붙은 함수는 비동기 함수라는 의미를 가지며 무조건 프로미스 객체를 반환한다.
- 비동기 함수내에서는 await 키워드를 사용해 비동기 작업이 완료될 떄까지 기다릴 수 있다.
async를 함수에 붙이1지 않으면 동기적으로 동작한다.
- async, non-blocking을 사용하는 이유는 ?
- 자원을 효율적으로 사용하게 됨으로써 제한된 자원에 대해 더 좋은 퍼포먼스를 보인다.