inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Từ giới thiệu về lập trình socket Windows đến các máy chủ hiệu suất cao!

Xây dựng server truyền file (có ví dụ)

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

Đã giải quyết

152

bknote71

1 câu hỏi đã được viết

0

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

 

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

 

제가 생각한 것은

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

  2. 디스크 읽기 최적화?

     

 

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

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

 

감사합니다.

socket.io udp iocp tcpip

Câu trả lời 2

1

nullnull8537

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

0

communityai8509

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

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

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

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

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

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

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

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

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

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

recv, send 리턴값 질문

0

78

2

스타,워크와 같은 디스창 (Disconnected)도 비정상 종료에 대응하는 시스템으로 봐야할까요?

0

96

2

수업과 관련해서 읽어볼 만한 책 있나요?

0

112

1

서버가 끊어버리는것에 대한 질문

0

122

2

TCP 의도적 장애 테스트 질문

0

159

2

shutdown()을 호출하는 이유

0

165

1

프로토콜이 적용된 파일 송신 서버에서 send, recv 질문 있습니다!

0

153

2

대표적인 장애 유현 2

0

131

2

대표적인 TCP 장애 유현

0

161

2

이벤트 기반 파일 입출력과 callback 기반 파일 입출력이 네트워크에도 쓰이는 기법인가요?

0

121

2

개발환경 질문이 있습니다.

0

137

1

TCP/IP vs UDP , 멀티 스레드에서의 병목 현상에 대한 질문이 있습니다!

0

221

2

메모리 관련 문제로 질문드립니다.

0

187

2

테스트 환경 질문드립니다!

0

168

2

ThreadAcceptLoop 의 우아한(?) 종료에 대해 질문드립니다.

0

419

2

하트비트 시 서버에서의 연결 종료

0

451

2

강사님 질문 드립니다.

0

249

1

소켓 입/출력 설계 정리

0

450

1

멀티스레드 기반 서버 관련 질문..!

0

412

2

빅 엔디언과 리틀 엔디언

0

379

2

TIME_WAIT 관련 문의드립니다.

0

226

1

강사님 강의자료 인쇄용으로 부탁드립니다.

0

288

1

bind 함수 관련 궁금증

0

357

2

스마트포인터 사용여부 및 가능성

0

260

2