2008-11-14 11 views

Trả lời

4

Tôi nghĩ rằng sự kiện dựa vs chủ đề dựa không phải là câu hỏi - đó là một nonblocking ghép I/O, ổ cắm Có thể lựa chọn, giải pháp vs giải pháp bơi thread.

Trong trường hợp đầu tiên mà bạn đang xử lý tất cả các đầu vào mà đi theo bất kể những gì đang sử dụng nó- vì vậy không có chặn trên reads- một single 'nghe'. Chuỗi trình nghe duy nhất truyền dữ liệu đến những gì có thể là các chuỗi công việc của các loại khác nhau - thay vì một cho mỗi kết nối. Một lần nữa, không chặn việc viết bất kỳ dữ liệu nào - do đó trình xử lý dữ liệu có thể chạy riêng với dữ liệu đó. Bởi vì giải pháp này chủ yếu là IO đọc/ghi nó không chiếm nhiều thời gian CPU, do đó ứng dụng của bạn có thể làm điều đó để làm bất cứ điều gì nó muốn.

Trong một giải pháp bơi thread bạn có đề cá nhân xử lý mỗi kết nối, vì vậy họ phải chia sẻ thời gian để chuyển đổi bối cảnh trong và dùng ngoài trời mỗi một 'nghe'. Trong giải pháp này, các CPU + IO ops nằm trong cùng một luồng - được một lát thời gian, vì vậy bạn sẽ đợi IO ops để hoàn thành mỗi luồng (chặn) mà có thể được thực hiện mà không cần sử dụng thời gian CPU.

Google cho non-blocking IO cho detail- hơn và bạn có thể tìm thấy một số prob so sánh vs hồ chủ đề quá.

(nếu có thể làm rõ các điểm này, hãy miễn phí)

+0

Cảm ơn bạn đã trả lời. – dowski

0

Nó không phải là về các chủ đề thực sự. Đó là về cách các chủ đề được sử dụng để yêu cầu dịch vụ. Đối với một cái gì đó như lighttpd bạn có một chủ đề duy nhất mà dịch vụ nhiều kết nối thông qua các sự kiện. Đối với các phiên bản cũ hơn của apache, bạn đã có một quá trình cho mỗi kết nối và quá trình tỉnh dậy trên dữ liệu đến, do đó bạn đã kết thúc với một số lượng rất lớn khi có rất nhiều yêu cầu. Bây giờ tuy nhiên với apache MPM là sự kiện dựa cũng như xem apache MPM event.

1

Nó thực sự phụ thuộc vào những gì bạn đang làm; lập trình dựa trên sự kiện chắc chắn là khó khăn cho các ứng dụng không phát triển. Là một máy chủ web thực sự là một vấn đề rất dễ hiểu và cả hai mô hình hướng sự kiện và luồng làm việc khá tốt trên các hệ điều hành hiện đại.

Phát triển chính xác các ứng dụng máy chủ phức tạp hơn trong mô hình sự kiện thường khá phức tạp - các ứng dụng được tạo luồng dễ viết hơn nhiều. Đây có thể là yếu tố quyết định hơn là hiệu suất.

3

Ứng dụng theo hướng sự kiện là không phải vốn đã nhanh hơn.

Từ Why Events Are a Bad Idea (for High-Concurrency Servers):

We examine the claimed strengths of events over threads and show that the 
weaknesses of threads are artifacts of specific threading implementations 
and not inherent to the threading paradigm. As evidence, we present a 
user-level thread package that scales to 100,000 threads and achieves 
excellent performance in a web server. 

Đây là năm 2003. Chắc chắn tình trạng luồng trên các HĐH hiện đại đã được cải thiện kể từ đó. Viết cốt lõi của một máy chủ dựa trên sự kiện có nghĩa là tái phát minh đa nhiệm hợp tác (phong cách Windows 3.1) trong mã của bạn, rất có thể trên một hệ điều hành đã hỗ trợ đa nhiệm trước thích hợp, và không có lợi ích của việc chuyển ngữ cảnh trong suốt . Điều này có nghĩa là bạn phải quản lý trạng thái trên heap thường được ngụ ý bởi con trỏ lệnh hoặc được lưu trữ trong một biến ngăn xếp. (Nếu ngôn ngữ của bạn có chúng, đóng cửa sẽ giảm bớt cơn đau này một cách đáng kể. Cố gắng làm điều này trong C thì ít thú vị hơn.)

Điều này cũng có nghĩa là bạn đạt được tất cả các nhiệm vụ đa nhiệm hợp tác.Nếu một trong các trình xử lý sự kiện của bạn mất một lúc để chạy vì bất kỳ lý do nào, nó sẽ xử lý chuỗi sự kiện đó. Yêu cầu hoàn toàn không liên quan đến độ trễ. Ngay cả các hoạt động tốn kém của CPU cũng phải được gửi đến một nơi khác để tránh điều này. Khi bạn đang nói về cốt lõi của một máy chủ đồng thời cao, 'hoạt động dài' là một thuật ngữ tương đối, theo thứ tự của micro giây cho một máy chủ dự kiến ​​sẽ xử lý 100.000 yêu cầu mỗi giây. Tôi hy vọng hệ thống bộ nhớ ảo không bao giờ phải kéo trang từ đĩa cho bạn!

Nhận hiệu suất tốt từ kiến ​​trúc dựa trên sự kiện có thể phức tạp, đặc biệt khi bạn xem xét độ trễ và không chỉ thông lượng. (Tất nhiên, có rất nhiều sai lầm, bạn có thể thực hiện với chủ đề cũng Concurrency vẫn là khó khăn..)

Một vài câu hỏi quan trọng đối với tác giả của một ứng dụng máy chủ mới:

  • Làm thế nào để đề thực hiện trên các nền tảng bạn định hỗ trợ hôm nay? Họ sẽ là nút cổ chai của bạn?
  • Nếu bạn vẫn gặp khó khăn với việc triển khai chuỗi không hợp lệ: tại sao không ai sửa lỗi này?
Các vấn đề liên quan