컴퓨터 장치의 입출력 데이터 전송은 CPU와 메모리 간의 데이터 처리와 비교했을 때 매우 느리며, 느려지는 원인이 다양합니다. CPU와 메모리 간의 데이터 처리는 메모리 용량을 늘리거나 CPU 성능을 향상하여 빠른 속도를 얻을 수 있지만 입출력 데이터 전송은 단순히 장치의 성능을 향상하여 빠른 속도를 얻을 수 없습니다.

이 때문에 BioStar 2는 효과적인 네트워크 데이터 전송을 위해 '비동기식 시스템 구조'를 갖고 있습니다.


동기식 시스템 구조 (Blocking I/O)

동기식 시스템 구조는 모든 I/O 동작을 순차적으로 수행합니다. 서버가 장치에 I/O 동작을 요청하는 경우 서버는 장치의 응답을 기다려야 하며 연결된 다른 장치가 네트워크 문제로 응답이 없다면 다른 I/O 동작은 수행되지 않습니다.
이 문제는 각 I/O 동작에 대해 새로운 프로세스를 호출하거나 Worker 스레드를 생성하여 해결할 수 있습니다. 새로운 프로세스를 호출하는 것은 메모리와 같은 시스템 리소스를 소모하게 됩니다. Worker 스레드를 생성하는 것은 프로세스를 호출하는 것보다 리소스를 조금 사용하지만, I/O 동작이 많을수록 더 많은 Worker 스레드를 생성해야 합니다. 하지만 시스템 리소스는 제한되어 있으므로 스레드 생성도 제한을 받게 됩니다1).


비동기식 시스템 구조 (Non-blocking I/O)

비동기식 시스템 구조는 동기식 시스템 구조와 완전히 다릅니다. 비동기식 시스템 구조는 이벤트 구동 시스템에 의해 I/O 동작이 수행됩니다. 만약, 서버가 콜백과 함께 I/O 동작을 요청하는 경우 시스템은 반환값을 서버에 보내고 프로세스가 계속 작업을 수행할 수 있도록 합니다. 동작이 완료되면 완료 이벤트를 동작 결과 값, 콜백 함수 결과와 함께 이벤트 루프로 보냅니다. 따라서, 비동기 시스템 구조는 I/O 동작을 위해 하나의 스레드만 사용합니다.
비동기 시스템을 사용하는 BioStar 2는 장치의 응답을 기다릴 필요가 없으며, 스레드 충돌 없이 다른 장치에 I/O 요청을 보낼 수 있습니다. 이 때문에 네트워크 연결이 끊어지는 문제가 발생해도 다른 장치와 정상적인 통신이 가능합니다.
이 시스템 구조는 소규모의 시스템에서는 장점이 없으나 다수의 장치와 트래픽이 발생하는 대규모 시스템에서는 큰 장점을 가집니다.