- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Tôi đang tìm thuật toán tốt nhất để lập lịch tin nhắn. Ý tôi khi nhắc đến việc lập lịch gửi tin nhắn là khi chúng ta có nhiều người tiêu dùng gửi tin nhắn trên xe buýt với các mức giá khác nhau.
Ví dụ: Giả sử chúng ta có dữ liệu D1 đến Dn. D1 được gửi đến nhiều người tiêu dùng C1 cứ sau 5ms, C2 cứ sau 19ms, C3 cứ sau 30ms, Cn cứ sau 10ms, Cn cứ sau 50ms.
Thuật toán tốt nhất để lên lịch hoạt động này với hiệu suất tối ưu (CPU, bộ nhớ, IO) là gì?
lời chào
câu trả lời hay nhất
Tôi có thể nghĩ ra nhiều lựa chọn, mỗi lựa chọn đều có chi phí và lợi nhuận riêng. Nó thực sự phụ thuộc vào nhu cầu của bạn là gì - điều thực sự được định nghĩa là “tốt nhất”. Tôi đã mã hóa một số khả năng bên dưới để hy vọng giúp bạn bắt đầu.
Tùy chọn 1: Thực hiện như sau cho từng đơn vị thời gian (trong ví dụ của bạn là mili giây)
cuộc gọi vui vẻEachMs
thời gian = getCurrentTime()
cho mỗi mốc thời gian
cho mỗi khách hàng
nếu thời gian % datum.customer.rate == 0
gửiMsg()
Ưu điểm của việc này là không cần bộ nhớ được lưu trữ nhất quán - bạn chỉ cần kiểm tra tại mỗi đơn vị thời gian xem bạn có nên gửi tin nhắn hay không. Điều này cũng có thể xử lý việc không có mặt thời gian == 0
Tin nhắn đã gửi - chỉ lưu trữ tốc độ modulo thời gian mà tin nhắn ban đầu được gửi và thay thế điều kiện bằng nếu thời gian % mốc .customer.rate == data.customer.firstMsgTimeMod
.
Nhược điểm của phương pháp này là nó phụ thuộc hoàn toàn vào việc được gọi với tốc độ 1 mili giây. Nếu một quá trình khác trên CPU gây ra sự chậm trễ và nó bỏ lỡ một chu kỳ, bạn có thể bỏ lỡ việc gửi toàn bộ tin nhắn (thay vì gửi nó sau).
Tùy chọn 2: Duy trì danh sách các bộ dữ liệu trong đó mỗi mục nhập thể hiện một nhiệm vụ cần hoàn thành trong vòng một phần nghìn giây đó. Tạo danh sách của bạn ít nhất bằng tốc độ tối đa chia cho đơn vị thời gian (nếu tốc độ tối đa của bạn là 50 mili giây và bạn muốn tính bằng mili giây thì danh sách của bạn phải dài ít nhất 50). Khi bạn bắt đầu chương trình, tin nhắn đầu tiên được đặt sẽ được gửi đến hàng đợi. Sau đó, mỗi lần bạn gửi tin nhắn, hãy cập nhật tin nhắn trong danh sách đó vào lần gửi tiếp theo.
func buildList(&list)
cho mỗi mốc thời gian
cho mỗi khách hàng
nếu list.size < mốc.customer.rate
list.resize(datum.customer.rate+1)
list[customer.rate].push_back(tuple(datum.name, customer.name))
func callEachMs(&list)
cho mỗi (datum.name, customer.name) trong danh sách[0]
gửiMsg()
list[customer.rate].push_back((datum.name, customer.name))
list.pop_front()
list.push_back(danh sách trống)
Điều này có ưu điểm là tránh được nhiều tính toán mô đun không cần thiết theo yêu cầu của phương án 1. Tuy nhiên, điều này đi kèm với chi phí sử dụng bộ nhớ tăng lên. Việc triển khai này cũng sẽ không hiệu quả nếu các tin nhắn khác nhau của bạn có tỷ lệ rất khác nhau (mặc dù bạn có thể sửa đổi nó để xử lý các thuật toán có tỷ lệ dài hơn hiệu quả hơn). Và nó vẫn phải được gọi mỗi mili giây.
Cuối cùng, bạn phải xem xét cấu trúc dữ liệu bạn sử dụng thật cẩn thận, vì điều này sẽ có tác động rất lớn đến hiệu quả của nó. Vì bạn đang bật lên từ phía trước và chèn từ phía sau vào mỗi lần lặp và kích thước của danh sách là cố định nên bạn có thể muốn triển khai một đệm tròn. để tránh sự dịch chuyển giá trị không cần thiết. Đối với danh sách các bộ dữ liệu, vì chúng sẽ chỉ được lặp đi lặp lại (không cần truy cập ngẫu nhiên) và được thêm vào thường xuyên, nên danh sách liên kết đơn có lẽ là giải pháp tốt nhất của bạn.
.
Rõ ràng là có nhiều cách hơn để bạn có thể thực hiện việc này nhưng hy vọng những ý tưởng này sẽ giúp bạn bắt đầu. Ngoài ra, hãy nhớ rằng bản chất của hệ thống bạn đang chạy có thể có tác động lớn đến việc phương pháp nào hoạt động tốt hơn hoặc liệu bạn có muốn làm điều gì đó hoàn toàn khác hay không. Ví dụ: cả hai phương pháp đều yêu cầu chúng có thể được gọi một cách đáng tin cậy ở một tỷ lệ cụ thể. Tôi cũng không mô tả cách triển khai song song hóa, đây có thể là lựa chọn tốt nhất nếu ứng dụng của bạn hỗ trợ chúng.
Về thuật toán - lên lịch gửi tin nhắn đến người tiêu dùng ở các mức giá khác nhau, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/50698807/
Tôi cần gửi ít nhất 200 tin nhắn cùng một lúc. Sau khi chương trình khởi động, email được gửi thành công đến 15 hoặc 17, sau đó báo lỗi: Message error: com.sun.mail.smtp.SMTPSendFailedException: 421 4.4.2
Tôi hiện đang phát triển một ứng dụng iOS sử dụng AVSynthesizer để chuyển đổi văn bản thành giọng nói. Điều tôi muốn làm là khi bộ tổng hợp đang nói, tôi có thể thay đổi tốc độ giọng nói thông qua thanh trượt và tốc độ nói sẽ thay đổi. tôi đang ở trong sli
Giả sử chúng ta có tình huống sau: Hàng đợi Bus dịch vụ có 10.000 tin nhắn Chức năng Azure (sử dụng lịch trình) trong đó chức năng được đặt làm trình kích hoạt cho hàng đợi SB Bên ngoài (ngoài tầm kiểm soát của chúng tôi) Hệ thống không thể vượt quá tốc độ yêu cầu nhất định Nếu tôi yêu cầu càng sớm càng tốt
TextToSpeech có một phương pháp để đặt tốc độ giọng nói: setSpeechRate(). Nhưng nó không có phương pháp ngược lại để truy vấn tốc độ hiện tại. Có cách nào để truy vấn hệ thống về giá trị này không? Câu trả lời hay nhất Bạn có thể nhận được Cài đặt tốc độ nói TTS mặc định.
Tôi có câu hỏi về giới hạn tốc độ NGINX. Có thể xếp hạng giới hạn dựa trên giá trị được giải mã của mã thông báo JWT không? Tôi không thể tìm thấy bất kỳ thông tin nào như vậy trong tài liệu. Hoặc thậm chí nếu có cách đánh giá bằng cách tạo các biến tùy chỉnh thuần túy (sử dụng LuaJIT)
Tôi có một tay cầm chơi game có phím định hướng và 2 nút. Tất cả điều này là kỹ thuật số (không phải analog). Tôi có một chương trình xử lý các sự kiện của họ: -(void)gamepadTick:(float)delta {
Vì vậy, tôi cần lấy tốc độ khung hình/giây của webcam trong OpenCV. Chức năng nào có thể làm được điều gì đó như thế này? Câu trả lời hay nhất int cvGetCaptureProperty( CvCapture* capture, int
Tôi đã tìm xung quanh tệp cài đặt CURL nhưng không tìm thấy nó trong /etc/, tôi cũng không tìm thấy nhiều trên ether của trang web cuộn... Vì vậy, về cơ bản điều tôi muốn làm là đặt giới hạn tốc độ tối đa mà cuộn tròn có thể tải lên ( bất kể đó là bao nhiêu phiên bản để chạy
Tôi có một hệ thống nhúng Linux chạy trên Atom, đây là một CPU đủ mới để có TSC (bộ đếm dấu thời gian) không đổi có tần số mà hạt nhân đo khi khởi động. Tôi sử dụng TSC trong mã của mình để giữ thời gian (để tránh gỡ lỗi kernel
Tôi đang tìm cách xếp hạng riêng các RPC giới hạn với mức độ chi tiết cao và thật thất vọng khi không có nhiều tùy chọn có sẵn cho vấn đề này. Tôi đang cố gắng thay thế API REST bằng gRPC và một trong những tính năng quan trọng nhất đối với tôi là khả năng thêm phần mềm trung gian cho từng tuyến. Không may
Tôi đang phát triển API bằng PHP, MySQL và Redis và muốn xếp hạng giới hạn các cuộc gọi cụ thể. API đứng sau CloudFlare. Để đạt được điều này, tôi sẽ tăng từng địa chỉ IP trong Redis mỗi giờ.
Tôi đang tìm cách giám sát lưu lượng ip trực tiếp trong linux theo lập trình (gọi thư viện hoặc chương trình độc lập). Tôi không muốn tổng số, tôi muốn băng thông hiện đang được sử dụng. Tôi đang tìm một trình giám sát lưu lượng mạng tương tự như menu isat của OS X
Vì vậy, tôi nhận thấy rằng Apple đã thay đổi SSKtoreProductViewController để tắt nút "viết đánh giá". Có cách giải quyết hoặc sửa chữa nào cho vấn đề này không? Câu trả lời hay nhấtSKStoreProductViewC
Hôm nay tôi đang duyệt trang web định giá Amazon RDS và bây giờ tôi thực sự thắc mắc họ thực sự tính toán tỷ lệ I/O như thế nào? Chính xác thì "0,10 USD trên 1 triệu yêu cầu" nghĩa là gì? Có ai có thể đưa ra một số ví dụ đơn giản từ EC2 đến RDS không?
đóng cửa. Câu hỏi này yêu cầu chi tiết hoặc rõ ràng. Hiện tại nó không chấp nhận câu trả lời. Bạn muốn cải thiện câu hỏi này? Thêm chi tiết và làm rõ câu hỏi bằng cách chỉnh sửa bài đăng này Đã đóng 5 năm trước. Cải thiện
Trong API cũ, dung lượng cho phép còn lại dường như được trả về dưới dạng tiêu đề HTTP còn lại X-Ratelimit. Tuy nhiên, tài liệu của phiên bản hiện tại không nói gì về điều này
Trong ứng dụng Android của mình, tôi quan sát thấy video quay camera trước đang quay ở tốc độ 7-10 khung hình/giây trong khi camera phía sau hoạt động tốt và ứng dụng camera gốc ghi video camera trước ở tốc độ 29 khung hình/giây.
Tôi đang mã hóa một video có dvb_teletext trong đó. Đã xảy ra lỗi khi mở bộ mã hóa cho luồng đầu ra #1:2. Tôi sử dụng lệnh sau để mã hóa video của mình. ffmpeg -threads 8 -i input.ts -
Tôi đang sử dụng lệnh sau để thêm hiệu ứng làm mờ cho video của mình {"-y", "-ss", "" + startMs / 1000, "-t", "" + (endMs - startMs) / 1000, " -Tôi ",
Tôi đang cố gắng chuyển đổi tệp video avi sang định dạng flv qua FFMPEG bằng lệnh sau: -i C:\files\input\test.avi -y -ab 448k -ar 48000 -vcodec
Tôi là một lập trình viên xuất sắc, rất giỏi!