웹에 요청을 보냄
웹이 본문을 반환함
까지는 알겠음.
그런데 여기서
1) 웹에 요청을 보냄 -> 웹이 본문을 반환하는 속도(1초당 반환된 byte값)-> 이걸 파일에 쓰는 속도(역시 1초당 byte값)인지
2) 웹에 요청을 보냄 -> 웹이 본문을 반환(여기까진 속도체크안함)-> 반환된 Stream을 FileStream열어서 1KB씩 쓰고 다른 스레드에서 1초마다 쓰인 KB값 검사
인건지
난 지금까지 1)인건줄 알았는데 웹 다운로드 속도 측정 메소드 질문글 올린거 답변보니 2)의 방식이더라. Stream에 본문을 넣을때까지의 시간을 측정하지않음.
넣어진 Stream에서 1킬로바이트를 Read하는 시간을 측정하지.
이걸 보면 웹에서 반환한 본문을 디스크가 아닌 메모리에 올리는 작업자체는 빠른건가? 싶기도한데, 그렇게보면 서버 상태에 따라 다운로드 속도가 천차만별로 갈리는게 이해가 안되서.
네트워크는 어차피 병목이라 어지간하면 디스크에서 쓰나 메모리에 올리나 속도는 동일할걸
'웹이 본문을 반환하는 속도'라는 말 자체가 애매한 것 같은데.. 내가 전에 뜯어본 라이브러리는 소켓이 반환한 바이트수를 기준으로 측정하더라.
소켓이 반환한 바이트들은 일단 메모리에 올라가는 거고, 이걸 중간중간 디스크에 쓰든 한번에 모아 쓰든 그건 소켓이 하는 일이 아니니 1번에 가까운 것 같음
물론 속도 측정을 실제 다운로드하는 프로그램이 아닌 외부에서 하는 거라면야 디스크에 쓰여지는 속도로 측정할 수밖에 없겠지.. 그런데 디스크에 쓰여지는 크기만을 기준으로 측정해도 사실 거의 차이 안나겠지. 디스크에 쓰는 속도가 회선 대역폭보다 압도적으로 월등할테니 보통은.
간단히 말하면, 서버 상태가 안 좋아 1초에 1메가를 받든, 아니면 좋아서 1초에 10메가를 받은 디스크는 전부 밀리지 않고 처리한다 -> 소켓이 받는 속도 == 디스크에 쓰는 속도 -> 소켓이 받는 속도를 직접 측정 안해도 디스크에 쓰는 속도를 통해 간접적으로 알 수 있다