인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

bknote71님의 프로필 이미지

작성한 질문수

Windows 소켓 프로그래밍 입문에서 고성능 서버까지!

파일 송신 서버 제작 (예제 포함)

"파일 송신 서버 제작" 강의 질문입니다!

해결된 질문

작성

·

76

·

수정됨

0

안녕하세요!
파일 송신 서버 제작 강의 부분중에 궁금한 것이 생겨 질문드립니다.

 

"파일 데이터를 전송할 때 큰 데이터를 한 번에 올리는 것이 더 성능적으로 좋아질 수 있다." 라고 하셨는데, 그 이유가 무엇인지 구체적으로 알고 싶습니다.

 

제가 생각한 것은

  1. 시스템 콜 호출 횟수 감소(유저->커널 레벨의 모드 스위치 감소)

  2. 디스크 읽기 최적화?

     

  • (한 번에 순차적으로 접근할 수 있는게 많아지는...?)

  • (I/O를 여러 번 하면, 할 때마다 랜덤 엑세스를 해야하니까, 디스크 seek 타임이 많아지는 이유가 맞을까요?)

     

 

  1. CPU가 접근하는 커널 페이지 버퍼의 캐시 히트율 증가

정도인데요. 혹시 다른 이유가 더 있는지 궁금합니다.

 

감사합니다.

답변 2

1

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

2, 3번으로 제시한 디스크 읽기 최적화 및 캐시 히트율도 영향이 있을 수 있겠으나 크지는 않아 보입니다. 그러나 1번은 분명 영향이 있습니다. 무엇보다 입/출력 간에 발생할 수 있는 대기에 따른 지연은 영향이 큽니다. 로컬 디스크에 대한 입/출력 지연도 있겠지만 그 보다는 네트워크 송신 시 발생 할 수 있는 지연은 큰 편입니다. 참고하시기 바랍니다. 😄

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다.

bknote71님께서 질문하신 “큰 데이터를 한 번에 전송하는 것이 성능적으로 좋은 이유”에 대해 설명드리겠습니다.

기본적으로 큰 데이터를 한 번에 전송하는 것은 여러 가지 성능 향상 요인을 동반합니다:

  1. 시스템 콜 호출 횟수 감소: 말씀하신 대로 시스템 콜 호출 횟수가 줄어들면 유저 모드와 커널 모드 간의 문맥 전환(Context Switch)이 적어지기 때문에 성능이 향상될 수 있습니다. 이는 매우 중요한 요소입니다. 시스템 콜은 컴퓨팅 비용이 많이 드는 작업으로, 호출이 감소하면 전체적인 작업 수행 속도가 빨라질 수 있습니다.

  2. 네트워크 대역폭 효율성: 네트워크 전송 시 패킷의 오버헤드가 있는데, 많은 양의 데이터를 한 번에 보내면 이러한 오버헤드가 줄어들어 네트워크 대역폭을 더 효율적으로 사용할 수 있습니다. 작은 데이터를 여러 번 전송하면 각 패킷에 header나 제어 정보가 붙기 때문에 전송 효율이 낮아집니다.

  3. TCP 윈도우 크기 및 비효율 감소: TCP 프로토콜에서는 데이터 흐름을 관리하기 위해 윈도우 크기를 사용하는데, 큰 데이터를 전송하면 이 윈도우 크기를 최대한 활용할 수 있어 네트워크 전송의 효율성을 높일 수 있습니다. 특히, 네트워크는 가변적 지연이 크기 때문에 크게 송신할 경우 같은 양의 신호 교환 대비 더 많은 양의 데이터를 보낼 수 있습니다.

  4. CPU와 네트워크 장치의 활용도 증가: 큰 데이터를 전송할 때 CPU가 반복적으로 패킷을 작성하고 보내는 부담이 감소하며, 한 번에 더 많은 데이터를 네트워크 인터페이스에 전송할 수 있어 CPU와 네트워크 장치 간의 작업 분담이 최적화됩니다.

제안하신 두 가지 이유 외에도 위와 같은 네트워크 및 시스템 관점에서도 이해할 수 있습니다.

아래의 링크에서 유사한 질문과 답변을 참고하실 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

bknote71님의 프로필 이미지

작성한 질문수

질문하기