Làm thế nào để máy chủ web lắng nghe yêu cầu mới?
Khi tìm hiểu về máy chủ web và cách chúng hoạt động, bạn có thể tò mò nếu chúng liên tục lắng nghe yêu cầu hoặc nếu chúng đợi cho đến khi chúng nhận được yêu cầu để thực hiện. Với ý nghĩ đó, bài hỏi và trả lời của SuperUser ngày nay có câu trả lời để thỏa mãn sự tò mò của độc giả.
Phiên hỏi và trả lời hôm nay đến với chúng tôi nhờ sự hỗ trợ của SuperUser - một phân ngành của Stack Exchange, một nhóm các trang web Hỏi & Đáp do cộng đồng điều khiển.
Ảnh chụp màn hình do xmodulo / Linux Ảnh chụp màn hình (Flickr).
Câu hỏi
Trình đọc SuperUser user2202911 muốn biết các máy chủ web lắng nghe các yêu cầu mới như thế nào:
Tôi đang cố gắng để hiểu chi tiết 'cấp độ sâu hơn' về cách thức hoạt động của các máy chủ web. Tôi muốn biết nếu một máy chủ, ví dụ như Apache, đang liên tục bỏ phiếu cho các yêu cầu mới hoặc nếu nó hoạt động bởi một loại hệ thống ngắt. Nếu nó là một ngắt, điều gì gây ra sự gián đoạn? Có phải nó là trình điều khiển card mạng?
Làm thế nào để một máy chủ web lắng nghe yêu cầu mới?
Câu trả lời
Người đóng góp cho SuperUser Greg Bowser có câu trả lời cho chúng tôi:
Câu trả lời ngắn gọn là một số loại hệ thống ngắt. Về cơ bản, họ sử dụng chặn I / O, nghĩa là họ ngủ (chặn) trong khi chờ dữ liệu mới.
- Máy chủ tạo ra một ổ cắm nghe và sau đó chặn trong khi chờ kết nối mới. Trong thời gian này, kernel đặt tiến trình vào một giấc ngủ gián đoạn nhà nước và chạy các quá trình khác. Đây là một điểm quan trọng; có quá trình thăm dò ý kiến liên tục sẽ lãng phí tài nguyên CPU. Nhân có thể sử dụng tài nguyên hệ thống hiệu quả hơn bằng cách chặn quá trình cho đến khi có công việc để làm.
- Khi dữ liệu mới đến trên mạng, card mạng sẽ bị gián đoạn.
- Thấy rằng có một ngắt từ card mạng, kernel, thông qua trình điều khiển card mạng, đọc dữ liệu mới từ card mạng và lưu nó vào bộ nhớ. (Điều này phải được thực hiện nhanh chóng và thường được xử lý bên trong trình xử lý ngắt.)
- Nhân xử lý dữ liệu mới đến và liên kết nó với một ổ cắm. Một quá trình đang chặn trên ổ cắm đó sẽ được đánh dấu có thể chạy được, có nghĩa là nó hiện đủ điều kiện để chạy. Nó không nhất thiết phải chạy ngay lập tức (kernel có thể quyết định chạy các tiến trình khác).
- Khi rảnh rỗi, kernel sẽ đánh thức quá trình máy chủ web bị chặn. (Vì bây giờ nó có thể chạy được.)
- Quá trình máy chủ web tiếp tục thực thi như thể không có thời gian trôi qua. Hệ thống chặn cuộc gọi của nó trả về và nó xử lý bất kỳ dữ liệu mới nào. Sau đó chuyển sang bước 1.
Có một cái gì đó để thêm vào lời giải thích? Tắt âm thanh trong các ý kiến. Bạn muốn đọc thêm câu trả lời từ những người dùng Stack Exchange am hiểu công nghệ khác? Kiểm tra chủ đề thảo luận đầy đủ ở đây.