참고 : https://lena-chamna.netlify.app/post/concurrency_programming_thread_and_queue/

비동기는 기본적으로 다른 스레드에 일을 위임하게 된다.
여러 쓰레드를 동시에 띄워서 동시에 프로그램들이 수행되는 것처럼 다루는 프로그래밍 방식.
일반적으로 태스크를 큐에 넣은 후 운영체제 레벨에서 이를 분산시켜 처리한다고 함
[참고]
병렬성은 작업들을 물리적으로 동시에 수행하기 때문에 하나의 작업의 응답시간을 줄일 수 있고,
동시성은 단일 작업의 응답시간을 줄일 수는 없지만, 한번에 여러작업을 처리해서 Throughput을 늘리는 데에 의미가 있습니다.
하나의 쓰레드로 동시 처리를 하게 됨(실제로 뒤에서 다른 쓰레드들이 일을 함)
보통 WAS에서 CPU에 비해 I/O Bound가 큼. 이때 비동기 프로그래밍은 대기시간을 낭비하지 않고 그 시간에 CPU가 다른 일을 처리할 수 있도록 Non-Blocking하게 동작함.