Buffer và cache
buffer
1
Cache
5
Male avatar

manhdung viết ngày 11/03/2016

Đây là hai khái niệm không mới nhưng lại rất dễ gây nhầm lẫn.

Khi thực hiện free -m, hẳn bạn đã từng thấy các tham số buffer và cache này.

             total       used       free     shared    buffers     cached
Mem:         31790      31600        190          0        143      23248
-/+ buffers/cache:       8207      23582
Swap:        15967          0      15967

Trên server này, tôi có buffers là 143M còn cached là 23248M (khoảng 23G rất lớn)

Buffer

Là một vùng nhớ physical memory được dùng để làm vùng chứa data tạm thời trước khi chuyển đến một nơi khác. Ví dụ khi bạn cần đọc/ghi data từ/ra một thiết bị ngoại vi như disk, network, màn hình hoặc keyboard... Đây là vùng physical memory được cấp sẵn. Nhờ vậy, hệ thống sẽ không cần tốn công điều tác để cấp phát vùng nhớ mỗi khi sử dụng.

Buffer sẽ giải quyết được vấn đề đồng bộ thời gian giữa hai đầu gửi và nhận. Ví dụ process cần ghi data xuống disk. Process sẽ gọi một system call nhưng do tốc độ xử lý của disk khá chậm so với memory nên hàm system call sẽ phải chờ. Thời gian chờ này rất lãng phí vì khi đó process không thể làm gì được cho đến khi system call return. Buffer sẽ khắc phục sự lãng phí này. Data thay vì đẩy ngay xuống disk thì đẩy trước vào buffer, system call sẽ trả kết quả về ngay lập tức. Data sau đó sẽ dần được đẩy từ buffer xuống disk.

Một lợi thế nữa khi dùng buffer là cho phép tái điều chỉnh kích cỡ các block data. Nếu process ghi block data có kích cỡ nhỏ hơn block size trên disk thì khi qua buffer, data sẽ được gom lại để khớp với block size của disk rồi mới flush xuống disk.

Buffer xuất hiện ở cả hai đầu đọc/ghi và thường được implement ở dạng queue, một đầu đọc, một đầu ghi.

Buffer cũng có thể làm trung gian để truyền data giữa hai process.

Cache

Thường là một lớp lưu trữ memory để giữ lại các data thường được sử dụng nhằm giảm việc truy cập đến các storage có tốc độ chậm hơn. Một data vừa được ghi thì sẽ sớm được đọc. Nguyên tắc này dẫn đến các data vừa ghi sẽ được đưa vào cache ngay để phục vụ cho thao tác đọc sau này.

Mở rộng ra, cache còn có thể là các static file được sử dụng thường xuyên, nằm trên proxy nhằm giảm việc truy cập đến các backend hoặc cũng có thể là một container chứa các object, nằm trên tầng web nhằm giảm truy cập đến db.

Bài gốc:
https://coffeecode101.blogspot.com/2016/02/buffer-va-cache.html

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

Male avatar

manhdung

44 bài viết.
240 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
Male avatar
67 11
Giới thiệu RabbitMQ là một message broker ( messageoriented middleware) sử dụng giao thức AMQP Advanced Message Queue Protocol (Đây là giao thức ph...
manhdung viết hơn 2 năm trước
67 11
Male avatar
45 4
Giả định bạn tiếp nhận một server mới toanh, bạn cần tìm một số thông tin về nó như loại CPU, loại main, loại memory, memory dùng của hãng nào... c...
manhdung viết hơn 1 năm trước
45 4
Male avatar
38 7
Giới thiệu MongoDB là một giải pháp nosql database. Data được lưu ở dạng các bson document. Hỗ trợ vertical scaling và horizontal scaling, dynamic...
manhdung viết hơn 2 năm trước
38 7
Bài viết liên quan
White
8 0
Cache là thượng sách để tăng tốc độ truy cập cho web. Thường nó giúp tốc độ trang web tăng lên ngay lập tức vài chục lần. Trước khi nghĩ đến hạ sác...
Ngoc Dao viết gần 2 năm trước
8 0
White
2 0
(Ảnh) Memcached là ban đầu là một ứng dụng Linux, nhưng vì Memcached là mã nguồn mở nên đã được các nhà lập trình phát triển cho nền tảng Windows ...
Võ Nhật Nam viết 1 năm trước
2 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


Male avatar
{{userFollowed ? 'Following' : 'Follow'}}
44 bài viết.
240 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!