Tôi có đúng không khi nói rằng đối với các Ứng dụng Web, bộ chứa web sẽ xử lý đa luồng?
Hầu hết các máy chủ web (Java và mặt khác, bao gồm JBoss) tuân theo mô hình "một luồng trên mỗi yêu cầu", tức là mỗi yêu cầu HTTP được xử lý hoàn toàn bởi chính xác một luồng. Chuỗi này thường sẽ dành phần lớn thời gian để chờ đợi những thứ như yêu cầu DB. Các thùng chứa web sẽ tạo chủ đề mới khi cần thiết.
Một số máy chủ (trong hệ sinh thái Java chủ yếu là Netty ) thực hiện xử lý yêu cầu không đồng bộ, với mô hình "một luồng thực hiện mọi thứ" hoặc một cái gì đó phức tạp hơn. Ý tưởng cơ bản là có nhiều luồng chờ sẽ lãng phí tài nguyên, do đó làm việc không đồng bộ có thể hiệu quả hơn.
Nếu vậy, tôi có thể giới thiệu các bước mới trong ứng dụng Web Dựa không?
Có thể, nhưng nên được thực hiện rất cẩn thận, vì các lỗi (như rò rỉ bộ nhớ hoặc thiếu đồng bộ hóa) có thể gây ra các lỗi rất khó tái tạo hoặc làm hỏng toàn bộ máy chủ.
Có bất kỳ lợi thế nào khi làm như vậy và trong kịch bản nào người ta sẽ cần phải làm điều đó?
Chà, lợi thế là bạn có thể làm những thứ song song. Sử dụng các luồng để cải thiện tốc độ tính toán thuần túy là điều bạn không nên làm trên máy chủ web, vì nó sẽ làm chậm việc xử lý các yêu cầu khác. Điều đó nên được thực hiện trên một máy chủ riêng biệt, có thể sử dụng một số loại hàng đợi công việc.
Một kịch bản hợp pháp cho đa luồng trong bối cảnh xử lý yêu cầu HTTP có thể là nếu bạn cần truy cập các tài nguyên mạng khác, ví dụ như gọi một số dịch vụ web khác nhau. Nếu bạn thực hiện trong một lần duy nhất, bạn phải đợi lần lượt từng cuộc gọi kết thúc. Nhưng nếu bạn sử dụng nhiều luồng, tổng thời gian chờ chỉ là độ trễ của cuộc gọi chậm nhất.
Concurrency Utilities
.