5

Tôi tiếp tục nghiên cứu và thử Kiểu phản ứng mã hóa bằng Reactor và RxJava. Tôi hiểu rằng mã hóa phản ứng sử dụng CPU tốt hơn so với thực thi luồng đơn.Lập trình phản ứng Ưu điểm/Nhược điểm

Có sự so sánh cụ thể nào giữa lập trình phản ứng và lập trình bắt buộc trong các ứng dụng dựa trên web không?

Hiệu suất đạt được bao nhiêu, thông lượng tôi đạt được bằng cách sử dụng lập trình phản ứng trên lập trình không phản ứng?

Ngoài ra ưu điểm và nhược điểm của Lập trình phản ứng là gì?

Có bất kỳ điểm chuẩn thống kê nào không?

Trả lời

8

Vâng, Lập trình phản ứng có nghĩa là bạn đang làm tất cả các tác vụ bị ràng buộc IO của bạn, chẳng hạn như các cuộc gọi mạng không đồng bộ. Đối với một cá thể nói rằng ứng dụng của bạn gọi một API REST bên ngoài hoặc một cơ sở dữ liệu, bạn có thể thực hiện yêu cầu đó một cách không đồng bộ. Nếu bạn làm như vậy luồng hiện tại của bạn không chặn. Bạn có thể phục vụ rất nhiều yêu cầu bằng cách đơn thuần sinh ra một hoặc vài luồng. Nếu bạn làm theo phương pháp chặn, bạn cần phải có một luồng để xử lý từng yêu cầu. Bạn có thể tham khảo bài đăng trên blog đa phần của tôi part one, part twopart three để biết thêm chi tiết.

Khác với bạn có thể sử dụng gọi lại để thực hiện tương tự. Bạn có thể thực hiện lời gọi không đồng bộ bằng cách sử dụng gọi lại. Nhưng nếu bạn làm như vậy đôi khi bạn có thể kết thúc với địa ngục gọi lại. Có một callback bên trong khác dẫn đến các mã rất phức tạp mà rất khó để duy trì. Mặt khác, RxJava cho bạn viết mã không đồng bộ, đơn giản hơn nhiều, có thể tổng hợp và dễ đọc hơn. Ngoài ra RxJava cung cấp cho bạn rất nhiều toán tử mạnh mẽ như Bản đồ, Zip, vv làm cho mã của bạn đơn giản hơn nhiều trong khi tăng hiệu suất do thực thi song song các tác vụ khác nhau không phụ thuộc lẫn nhau.

RxJava không phải là một triển khai Observer khác với bộ toán tử thay vì nó cho phép bạn xử lý lỗi tốt và thử lại các cơ chế thực sự tiện dụng.

Nhưng tôi chưa thực hiện bất kỳ đánh dấu băng ghế dự bị nào của RxJava với phương pháp lập trình bắt buộc để khen bạn một cách thống kê. Nhưng tôi khá chắc chắn rằng RxJava sẽ mang lại hiệu suất tốt hơn so với các cơ chế chặn.

4

Ngoài những gì họ đã phản hồi về không có tính năng chặn, một tính năng tuyệt vời khác để sử dụng Lập trình phản ứng, là việc sử dụng quan trọng của áp suất ngược. Thông thường được sử dụng trong các trường hợp nhà xuất bản của bạn phát ra nhiều thông tin hơn người tiêu dùng của bạn có thể xử lý.

Vì vậy, có cơ chế này bạn có thể kiểm soát luồng lưu lượng truy cập giữa cả hai và tránh các vấn đề khó chịu trong bộ nhớ.

Bạn có thể thấy một số ví dụ practicle của lập trình phản ứng ở đây https://github.com/politrons/reactive

Và về lại áp lực ở đây https://github.com/politrons/Akka/blob/master/src/main/scala/stream/BackPressure.scala

Bằng cách này, những bất lợi duy nhất về lập trình phản ứng, là đường cong học tập vì you're thay đổi mô hình lập trình. Nhưng các công ty hiện nay đều quan trọng sự tôn trọng và làm theo các tuyên ngôn phản ứng http://www.reactivemanifesto.org/

3

Nhược

  • Thêm bộ nhớ chuyên sâu để lưu trữ các dòng dữ liệu hầu hết các lần (kể từ khi nó được dựa trên dòng thời gian).
  • Có thể cảm thấy không cần thiết để tìm hiểu khi bắt đầu (cần mọi thứ để trở thành luồng).
  • Hầu hết các phức tạp phải được xử lý tại thời điểm khai báo các dịch vụ mới.
  • Thiếu tài nguyên tốt và đơn giản để tìm hiểu.

  • Thường bị nhầm lẫn là tương đương với Lập trình phản ứng chức năng.

0

Lập trình phản ứng là một kiểu kiến ​​trúc vi mô liên quan đến định tuyến thông minh và tiêu thụ sự kiện.

Phản ứng là bạn có thể làm được nhiều hơn với ít chi phí hơn, cụ thể là bạn có thể xử lý các tải cao hơn với ít chuỗi hơn.

Các loại phản ứng không nhằm mục đích xử lý yêu cầu hoặc dữ liệu của bạn nhanh hơn. Sức mạnh của chúng nằm trong khả năng đáp ứng nhiều yêu cầu đồng thời và xử lý các hoạt động có độ trễ, chẳng hạn như yêu cầu dữ liệu từ máy chủ từ xa .

Chúng cho phép bạn cung cấp chất lượng dịch vụ tốt hơn và lập kế hoạch dung lượng dự đoán bằng cách xử lý nguyên bản với thời gian và độ trễ mà không cần tốn nhiều tài nguyên hơn.

Từ
https://blog.redelastic.com/what-is-reactive-programming-bc9fa7f4a7fc https://spring.io/blog/2016/06/07/notes-on-reactive-programming-part-i-the-reactive-landscape https://spring.io/blog/2016/07/28/reactive-programming-with-spring-5-0-m1

Các vấn đề liên quan