Tôi đã viết một chương trình trong C chờ một sự kiện và sau đó chạy lệnh hệ thống bên ngoài theo chức năng system()
.nhà sản xuất nhanh/người tiêu dùng chậm trong C
while(true){
wait_for_event();
system("cmd");
}
Tôi có một vấn đề seriuos về vấn đề này, The cmd
là một lệnh nặng và phải mất vài giây để hoàn thành, ứng dụng của tôi bỏ lỡ một số sự kiện trong khoảng thời gian này.
Vì vậy, tôi quyết định chuyển system
chức năng, mà là rất nặng nề, để một chương trình khác, Vì vậy, tôi đã thay đổi chương trình của tôi như sau:
while(true){
wait_for_event();
write_to_fifo("cmd");
}
và viết một chương trình khác:
while(true){
system(read_from_pipe());
}
nhưng nó không giúp được gì, bởi vì nếu nhà sản xuất (chương trình 1) viết nhanh hơn người tiêu dùng (chương trình thứ 2), thì người tiêu dùng sẽ bỏ sót một số dữ liệu!
Có cách nào để xử lý sự cố này không?
Sử dụng chuỗi để nắm bắt các sự kiện, thêm chúng vào hàng đợi và yêu cầu người tiêu dùng của bạn kéo từ hàng đợi đó. – Falmarri
Có thể sử dụng nhiều chủ đề để giảm gánh nặng cho người tiêu dùng trong khi rời khỏi nhà sản xuất đơn luồng không? Cấp, đó là một trận thua, nhưng nó có thể là đủ để giúp bạn tiết kiệm được yêu cầu của bạn. Bạn cũng nên xem xét một kho dữ liệu nếu nó vẫn trở nên quá nhiều cho các chủ đề phụ. – pickypg
Làm cách nào để bạn thiết lập đường ống?Tất nhiên, nếu bạn liên tục nhận được nhiều dữ liệu hơn bạn có thể xử lý, một cái gì đó sẽ "cho". Nhưng hoàn toàn có thể sử dụng một đường ống để xử lý một lượng lớn dữ liệu từ từ. Nếu không, nó sẽ không hoạt động để làm 'mèo myprog.c | gcc -o myprog' - và nó - gcc là khá chậm ở lần, mèo sẽ đẩy nhanh như nó có thể vào đường ống. –