데이터가 디스크에 저장되는 방식은 I/O 서비스의 총 시간에 영향을 미칩니다.
각 트랙이 10개의 물리적 블록으로 나누어지고, 각 블록에는 1개의 논리적 레코드가 저장된다고 가정합니다. 논리 레코드 R1, R2,..., R10은 동일한 트랙에 저장됩니다. 레코드 배열 순서는 다음 표와 같습니다. (추천 학습: 웹 프론트엔드 비디오 튜토리얼)
디스크의 회전 속도는 20ms/week이고 헤드는 현재 R1의 시작 부분에 있습니다. 시스템이 단일 버퍼를 사용하여 이러한 레코드를 순차적으로 처리하고 각 레코드의 처리 시간이 4ms인 경우, 이 10개의 레코드를 처리하는 데 걸리는 최대 시간은 204ms입니다. 60ms입니다.
우선 디스크 속도가 주당 20ms인 것으로 보아 레코드를 읽는 데 2ms가 걸린다는 것을 알 수 있습니다.
한 가지 주목할 만한 점은 다음과 같습니다.
기록을 처리하기 위한 전제 조건은 기록을 읽는 것입니다. 첫 번째 레코드를 처리할 때 먼저 읽어서 처리해야 하므로 R1을 처리하는 데 필요한 시간은 2ms+4ms입니다. R1을 처리할 때 헤드가 R4의 위치로 회전되었으므로 조정이 필요합니다. 이때 R2의 위치로 가려면 R5, R6, R7, R8, R9, R10, R1을 거쳐야 하는데, R2를 읽는 데 2ms, 데이터를 처리하는 데 4ms가 걸린다. .R2의 총 처리 시간은 22ms 입니다.
유추하자면 이 10개의 레코드를 처리하는 데 걸리는 시간은
2+4+(16+2+4)×9=204ms
위의 분석을 통해 대부분의 시간이 다음과 같은 과정에서 소비된다는 것을 알 수 있습니다. 머리 움직임은 중앙 뒤로.
이러한 시간 소비를 줄이기 위해 배열 순서를 최적화할 수 있습니다: R1, R8, R5, R2, R9, R6, R3, R10, R7, R4. 이런 식으로 R1이 처리되면 헤드는 R2의 위치에 도달합니다. R2를 직접 읽고 R2를 처리하고 R2를 처리한 후 헤드는 다시 R3의 위치에 도달합니다. 비유하자면 각 레코드의 읽기 및 처리 시간은 2ms+4ms=6ms이므로 총 시간은 (2+4)×10=60ms입니다.
위 내용은 디스크에 저장된 데이터의 배열은 어떤 영향을 미치나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!