Go GC
Golang GC#
동기와 비동기에 대해 설명해주세요.
동기(Synchronous)와 비동기(Asynchronous)는 프로그래밍에서 작업의 진행 방식을 나타내는 용어입니다. 이들은 작업이 어떻게 실행되고 완료되는지를 기준으로 구분됩니다.
동기(Synchronous)
동기 방식은 작업이 순차적으로 실행되며, 이전 작업이 완료될 때까지 다음 작업이 실행되지 않습니다. 간단히 말해, 작업 A가 작업 B에 의존하고 있을 때, 작업 A가 완료되기 전까지 작업 B는 시작되지 않습니다. 작업이 블로킹되고 대기 상태에 들어갈 수 있습니다. 비동기(Asynchronous)
비동기 방식은 작업이 동시에 실행되고, 이전 작업이 완료되기를 기다리지 않고 다음 작업을 진행합니다. 각 작업은 별도의 스레드 또는 프로세스에서 실행되며, 작업 간에 상호 의존성이 없습니다. 작업이 블로킹되지 않고 계속 진행됩니다. 블로킹과 넌블로킹에 대해 설명해주세요.
블로킹(Blocking)과 넌블로킹(Non-blocking)은 작업을 어떻게 처리하는지를 나타내는 용어로서, 주로 입출력(IO) 작업과 관련됩니다.
블로킹(Blocking)
블로킹 작업은 호출된 함수 또는 작업이 완료될 때까지 현재 실행 흐름이 멈추는 것을 의미합니다. 예를 들어, 파일을 읽을 때 블로킹 작업을 수행하면 파일이 완전히 읽혀질 때까지 다음 코드는 실행되지 않습니다. 블로킹 작업을 수행하는 동안은 대기 상태에 있을 수 있습니다. 넌블로킹(Non-blocking)
넌블로킹 작업은 호출된 함수 또는 작업이 즉시 반환되며, 현재 실행 흐름이 멈추지 않고 계속 진행됩니다. 예를 들어, 파일을 비동기적으로 읽을 때 넌블로킹 작업을 수행하면 파일 읽기 요청 후 즉시 반환되며, 나중에 완료될 때 알림을 받을 수 있습니다. 넌블로킹 작업을 수행하는 동안 다른 작업을 수행할 수 있습니다.
TCP와 UDP의 특징에 대해 설명해주세요.
TCP
연결 지향적: 데이터를 전송하기 전에 연결을 설정하고, 신뢰성 있는 데이터 전송을 보장하기 위해 연결을 유지합니다. 신뢰성: 패킷 손실이나 오류가 발생할 경우 재전송을 통해 데이터의 정확성과 순서를 보장합니다. 흐름 제어와 혼잡 제어: TCP는 데이터의 흐름을 조절하고 네트워크 혼잡을 방지하기 위해 흐름 제어 및 혼잡 제어 메커니즘을 사용합니다. 순차적 데이터 전송: 패킷의 순서를 보장하여 데이터를 원래의 순서대로 수신합니다. 상대적으로 높은 지연: 연결 설정 및 신뢰성을 위한 추가적인 작업으로 인해 지연이 발생할 수 있습니다. UDP
비연결 지향적: 데이터 전송 전에 연결을 설정하지 않고, 데이터 그램을 즉시 전송합니다. 신뢰성 없음: 패킷 손실이나 오류가 발생할 경우에도 재전송을 하지 않으므로 데이터 손실이 발생할 수 있습니다. 흐름 제어나 혼잡 제어를 지원하지 않음: UDP는 흐름 제어나 혼잡 제어 메커니즘을 제공하지 않기 때문에 데이터 전송의 품질을 보장하지 않습니다. 높은 성능: TCP에 비해 간단하며, 데이터의 전송 속도가 빠릅니다. 다중 캐스트와 브로드캐스트 지원: UDP는 다중 캐스트와 브로드캐스트를 지원하여 하나의 송신자가 여러 개의 수신자에게 데이터를 전송할 수 있습니다.