inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션

정리

버퍼 질문입니다.

203

열심인 참새

작성한 질문수 32

0

1. 1byte 씩 전송하면 당연히 시스템콜이 많이 작동하므로 속도가 느리다
2. 8바이트씩 전송하면 시스템 콜에서 어차피 8바이트씩 전송하므로 시스템 콜을 적게 호출 할 수 있다

[질문]
한번에 전송해도 시스템콜에서 8kb바이트씩 보낼텐데
시스템콜 요청하는 횟수가 2번과 비슷할텐데 왜 버퍼를 쓰는게 더 빠르게 나오는 걸까요?
혹시 이게 한번 전송하면 한꺼번에 시스템콜 직전까지 전달하므로 병목현상 뭐 그런걸까요?
++
강의에서 한번에 써도 os상에서 8kb씩 보내신다고 했던것 같은데 맞나요?
메모리에 한번에 올려서 시스템콜에 가져다 주는 것이 부하가 걸려서 8kb씩 버퍼로 하는 것보다 더 느린걸까요?

java 네트워크 객체지향

답변 2

0

김영한

안녕하세요. 열심인 참새님

2번 내용을 잘못 이해하신 것 같아요.

2. 8바이트씩 전송하면 시스템 콜에서 어차피 8바이트씩 전송하므로 시스템 콜을 적게 호출 할 수 있다

 

다음과 같이 3단계가 필요합니다.

자바 -> 시스템 콜 -> 디스크 쓰기

자바에서 8kb 씩 전송하면 시스템 콜에서 디스크 쓰기시점에 8kb를 전송한다고 보시면 됩니다.

그리고 자바에서 시스템 콜을 호출하는 것 차제가 매우 무거운 작업으로 이해하시면 됩니다 🙂

감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 열심인 참새님!

버퍼를 사용하는 이유는 크게 두 가지로 나눌 수 있습니다. 첫째, 시스템 호출(system call)의 횟수를 줄여주는 것과 둘째, 데이터 전송의 효율성을 높이기 위함입니다.

  1. 시스템 호출 횟수 감소: 파일을 1바이트씩 읽거나 쓰면 매번 시스템 호출을 해야 합니다. 시스템 호출은 운영체제와의 인터페이스 역할을 하기 때문에 네이티브 코드로 변환되면서 오버헤드가 발생합니다. 따라서, 시스템 호출을 줄여서 오버헤드를 감소시키는 것이 중요합니다.

  2. 입출력 속도의 향상: 실제로 운영체제가 데이터 전송을 처리할 때 8KB(또는 다른 설정된 크기) 단위로 데이터를 관리하기 때문에, 버퍼를 통해 가능한 한 많은 데이터를 한 번에 모아 처리하는 것이 효율적입니다. 즉, 버퍼에 데이터를 모았다가 일정 크기 이상이 되었을 때 한꺼번에 전송하기 때문에 운영체제의 디스크 입출력 작업이 최적화됩니다.

질문하신 내용 중에, “한 번에 전송해도 시스템콜에서 8KB씩 보낼 텐데 시스템콜 요청하는 횟수가 비슷할 텐데 왜 버퍼를 쓰는 게 더 빠르게 나오는 걸까요?“라는 부분에서는, 버퍼를 사용하지 않고 매번 8바이트를 전송할 경우 버퍼링하여 데이터를 모아서 보내는 것보다 호출 횟수가 더 많고 잦아지기 때문에 비효율적이 되는 것입니다.

한 번에 데이터를 메모리에 올려서 시스템 호출에 전달하는 것보다 적절한 크기(예: 8KB)로 버퍼링하여 전달하면 운영체제의 입장에서도 효율적으로 데이터 전송을 관리할 수 있어 전반적인 입출력 성능을 향상시킬 수 있습니다.

유사한 질문에 대한 흥미로운 답변이 다음 링크에 있을 수 있습니다:
- 싱글톤 객체에 접근할 때 병목현상(?)에서의 시스템 설명

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

RequestHandler 버전 간 process() 파라미터 차이 질문

0

74

2

리플렉션 default

0

54

1

그럼 SOURCE나 CLASS는 어떤 경우에 사용하나요?

0

80

2

네트워크 프로그램 자원종료 Socket 정리 시 closed 사용 문의

0

102

2

FileInputStream의 transferTo 사용 시 Buffer 문의

0

66

1

오타 제보 드립니다

0

76

2

강좌 복습 팁이 있으신 분들 공유해주시면 감사하겠습니다.

0

108

1

16강 질문있습니다.

0

51

1

한글이 깨질 떄 어떻게 해야 하나요?

0

81

1

자원 정리시 에러가 발생 했을 때 메모리 상황 및 실무에서 로그 확인 방법

0

95

1

인텔리제이에서 네모(스탑버튼) 누르는 것의 의미

-1

70

1

강의 섹션 8: 네드워크 -프로그램 3부분 10:45 오타?

0

90

2

제대로 이해한게 맞나 궁금합니다

0

80

1

File,Files 강의 2번쨰 Files 07:30 에 tmep 파일들을 다 지운건가요 ?

0

65

1

/.well-known/appspecific/com.chrome.devtools.json 에러에 대해서

0

631

1

Socket 자원을 정리할때 stream 을 정리하지 않는 이유가 궁금합니다.

0

92

1

클라이언트 강제종료시 오류 메세지

0

109

2

고급 2편에는 퀴즈가 없네요?

0

100

1

55. 네트워크 프로그램5 - 자원정리2 질문

0

69

1

클라이언트가 FIN과 함께 보내는 ACK는 무엇에 대한건가요?

1

109

2

BufferedInputStream이 1바이트씩 조회해도 성능이 좋은 이유

0

82

1

오타제보

0

64

2

문자 집합 호환성 여부를 판단할 때

0

54

1

utf-8, char

0

54

1