Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Tìm kiếm giải pháp giữa việc đặt nhiều bộ hẹn giờ hoặc sử dụng hàng đợi tác vụ đã lên lịch

Bộ định thời Node.js được triển khai rất hiệu quả. Việc triển khai chúng (được mô tả trong một bài báo chi tiết về cách chúng hoạt động) có thể dễ dàng xử lý số lượng lớn bộ định thời.

Chúng được giữ trong một danh sách liên kết kép được sắp xếp và chỉ bộ hẹn giờ tiếp theo để kích hoạt mới có bộ hẹn giờ hệ thống libuv thực tế được liên kết với nó. Khi bộ hẹn giờ đó kích hoạt hoặc bị hủy, bộ hẹn giờ tiếp theo trong danh sách sẽ trở thành bộ hẹn giờ được gắn với bộ hẹn giờ hệ thống libuv thực tế. Khi một bộ đếm thời gian mới được đặt, nó chỉ được đưa vào danh sách đã sắp xếp và, trừ khi nó trở thành bộ hẹn giờ tiếp theo kích hoạt, nó chỉ nằm trong danh sách chờ đến lượt tiếp theo. Bạn có thể có hàng nghìn trong số này rất hiệu quả.

Dưới đây là một số tài nguyên về cách hoạt động của các bộ hẹn giờ này:

Có bao nhiêu setTimeouts đồng thời trước các vấn đề về hiệu suất?

Nodejs quản lý bộ hẹn giờ trong nội bộ như thế nào

Tham chiếu đầu tiên chứa một loạt các nhận xét từ mã nodejs thực tế mô tả cách hoạt động của hệ thống danh sách liên kết hẹn giờ và hệ thống này được tối ưu hóa cho mục đích gì.

Bài viết thứ hai cung cấp cho bạn mô tả cấp cao hơn một chút về cách tổ chức của nó.

Có những hiệu quả khác để khi một bộ đếm thời gian đến đầu danh sách và nó kích hoạt, thì sau khi gọi lệnh gọi lại đó, node.js sẽ kiểm tra phía trước danh sách xem có bất kỳ bộ hẹn giờ nào khác hiện cũng sẵn sàng kích hoạt hay không. Thao tác này sẽ quét mọi bộ hẹn giờ khác có cùng "thời gian mục tiêu" với bộ hẹn giờ đầu tiên và cũng như bất kỳ bộ hẹn giờ nào khác đã đến hạn trong khi các lệnh gọi lại khác nhau này đang chạy.

Khi bạn có hàng nghìn bộ hẹn giờ, sẽ mất nhiều thời gian hơn một chút để chèn bộ đếm thời gian mới vào danh sách liên kết được sắp xếp nếu có nhiều bộ hẹn giờ trong đó, nhưng một khi nó đã được chèn vào thì hầu như không có vấn đề gì về số lượng bộ đếm đó bởi vì bạn chỉ cần xem xét người tiếp theo để khai hỏa. Vì vậy, quá trình ngồi đó với thậm chí hàng chục nghìn bộ hẹn giờ đang chờ xử lý chỉ là một bộ đếm thời gian hệ thống (đại diện cho sự kiện bộ hẹn giờ tiếp theo sẽ kích hoạt) và một loạt dữ liệu. Tất cả dữ liệu đó cho các bộ hẹn giờ khác trong tương lai không khiến bạn mất bất cứ thứ gì nếu chỉ ngồi ở đó.

Đối với Javascript, tương tự như giải pháp đầu tiên của python, tôi có thể tạo ra nhiều setTimeouts nếu cần, nhưng vấn đề là tất cả thời gian chờ đều hoạt động trên chuỗi chính, nhưng như tôi đã nói, các tác vụ không tốn nhiều tài nguyên và tôi chỉ cần độ chính xác của thứ hai.

Đối với tôi, dường như nodejs có thể xử lý số lượng setTimeout() của bạn cuộc gọi tốt. Nếu bạn gặp sự cố trong node.js, đó không phải là do số lượng bộ định thời, nhưng bạn phải chắc chắn rằng bạn sử dụng đủ CPU cho sự cố nếu bạn có nhiều việc cần xử lý hơn một lõi có thể xử lý. Bạn có thể mở rộng việc sử dụng cốt lõi với phân cụm nodejs hoặc với hàng đợi công việc sử dụng Worker Threads hoặc các quy trình nodejs khác để trợ giúp xử lý. node.js, bản thân nó, rất hiệu quả với bất kỳ thứ gì liên quan đến I / O, miễn là bạn không thực hiện tính toán nhiều CPU, một luồng node.js đơn lẻ có thể xử lý rất nhiều xử lý sự kiện.

Hãy nhớ rằng bộ định thời Javascript không đảm bảo độ chính xác. Nếu bạn làm hỏng CPU, một số bộ hẹn giờ sẽ kích hoạt muộn hơn so với lịch trình vì chúng không được báo trước. Tuy nhiên, nếu các tác vụ của bạn không đòi hỏi nhiều CPU, thì bạn có thể vẫn ổn.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm thế nào để chuyển đổi Redis date trong R

  2. Thông cáo báo chí:ScaleGrid thông báo dịch vụ lưu trữ cho Redis ™ trên AWS

  3. So sánh memcache, redis và ehcache dưới dạng khung bộ nhớ đệm phân tán

  4. spring-boot redis:Làm cách nào để vô hiệu hóa tất cả các phiên của người dùng?

  5. Cách đặt Ngày hết hạn cho nhiều khóa trong Redis