비동기 입출력은 통신이 진행되는 동안에도 CPU가 동시에 실행되도록 하는 입출력 처리의 한 형태입니다.

디스크와 네트워크는 CPU보다 훨씬 느립니다. CPU는 입출력 작업을 시작하고 결과를 기다리는 대신, 데이터가 필요할 것으로 알려지면 즉시 입출력 작업을 시작하고, 결과에 의존하지 않는 다른 명령을 계속 실행할 수 있습니다.

설명하기 위한 대략적인 비교 몇 가지:

장치 레이턴시 대역폭
CPU L3 Cache 10 ns >400 GB/s
메모리 100 ns 100 GB/s
디스크 (NVMe SSD) 400 us 380 MB/s
네트워크 50 - 200 ms 1 Gb/s (125 MB/s)

(2KB 크기의 랜덤 읽기에 대한 fio로 보고된 실제 디스크 통계 - ~190,000 IOPS)

다행히도 SSD 드라이브는 작업을 동시에 수행할 수 있으므로 CPU는 동시에 여러 요청을 시작하고 계속해서 실행한 다음 여러 작업의 결과를 거의 동시에 받을 수 있습니다.

일부 데이터베이스 (예: lmdb / mdbx)는 메모리 매핑 스토리지를 사용하여 디스크에 읽고 쓸 수 있습니다. 아쉽게도 메모리 매핑 스토리지는 커널(mmap)에 의해 구현되며 비동기적이지 않습니다. 따라서 작업이 완료될 때까지 대기하는 동안 실행이 차단됩니다.

비동기 입출력에 대한 자세한 내용은 여기에서 읽을 수 있습니다.

왜 블록체인인가 (Why blockchain?)