Máy chủ lắng nghe trên cổng 80 KHÔNG CÓ để xử lý nhiều quy trình. Trình nền TCP đơn giản của các năm cũ chỉ có thể xử lý một kết nối tại một thời điểm. Bạn có thể mô phỏng hành vi này bằng cách có một chương trình như netcat
nghe trên một cổng cụ thể và cố gắng kết nối hai máy với nó. Một cái sẽ vào trong, cái kia sẽ bật ra mà không có kết nối. Những daemon này hầu như vô dụng nên bạn không bao giờ nhìn thấy chúng nữa.
Đối với một cái gì đó giống như một máy chủ web, nó nghe trực tiếp trên cổng. Điều cần lưu ý là nó đang nằm trên thư viện ổ cắm của hệ điều hành. Khi một kết nối mới được thiết lập, thư viện ổ cắm chuyển ổ cắm hoàn toàn mới cho phần mềm máy chủ web. Tại thời điểm đó, phần mềm máy chủ web có một số tùy chọn.
Một khả năng là nó chuyển đối tượng socket sang một luồng mới trong cùng tiến trình. Bất cứ khi nào giao tiếp xảy ra trên ổ cắm này, chủ đề này sẽ xử lý nó. Quá trình cha mẹ làm trung gian cho các luồng đang hoạt động tại bất kỳ thời điểm nào, có thể rất nhiều.
Một khả năng khác là nó tạo ra một tiến trình mới và truyền đối tượng socket vào tiến trình. Theo tôi hiểu, giờ đây hệ thống ổ cắm của hệ điều hành đã giao tiếp qua trung gian giữa các quy trình con này và các mục tiêu của chúng. Quá trình cha mẹ vẫn có một số kiểm soát đối với các quy trình, chẳng hạn như tiêu diệt các hung và các thông tin liên lạc giữa các quá trình khác.
Phương pháp nào trong số các phương pháp này hiệu quả hơn phụ thuộc vào hệ điều hành. IIRC, Apache có thể chạy ở một trong hai chế độ.
Về bản chất, thư viện socket cung cấp một mức xử lý song song cho máy chủ web. Nó có thể xử lý nhiều kết nối đồng thời chủ động truyền dữ liệu, đồng thời chấp nhận các kết nối mới.
Đối với một trình duyệt có thể tăng tốc nhiều lần thử kết nối với máy chủ web để cải thiện thời gian tải, tính song song cũng được áp dụng ở cuối trình duyệt, đây là một điều tốt và tuyệt vời. Trình duyệt theo dõi trạng thái của trang khi nó đang tải và nhiều lần thử kết nối mà nó tạo ra là tất cả quá trình.
recv()
trong từng quy trình.