cuốn sách gpt4 ai đã làm

Hàng đợi nhà sản xuất-người tiêu dùng C++ với chuyển đổi (rất) nhanh và đáng tin cậy

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 15:24:59 28 4
mua khóa gpt4 Nike

Xin chào, tôi đang xem xét sử dụng hàng đợi người tiêu dùng của nhà sản xuất nhanh chóng và đáng tin cậy để chuyển đổi luồng. Tôi đang làm việc trên Windows bằng VC++.

Thiết kế của tôi dựa trên Anthony WilliamsVề cơ bản, hàng đợi là một boost::mutex với boost::condition_variable. Thông thường, thời gian từ lúc thông báo_one() đến khi thức dậy dao động trong khoảng từ 10 (hiếm) đến 100 micro giây, với hầu hết các giá trị khoảng 50 micro giây. Tuy nhiên, khoảng 1 trong 1.000 người vượt quá 1 mili giây và một số vượt quá 5 mili giây.

Tôi chỉ tự hỏi liệu đây có phải là những giá trị điển hình không? Có cách nào nhanh hơn để báo hiệu vòng quay dưới mức không? Có phải tất cả đều từ đây đến việc quản lý mức độ ưu tiên của luồng không? Tôi chưa bắt đầu xem xét các mức độ ưu tiên, nhưng tôi chỉ tự hỏi liệu có cơ hội nào đưa nó vào vùng khá ổn định trong khoảng 10 micro giây không?

Cảm ơn

EDIT: Khi sử dụng SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS), thời gian đánh thức trung bình vẫn là khoảng 50 micro giây, nhưng các giá trị ngoại lệ ít hơn nhiều, chủ yếu hiện nay là khoảng 150-200 micro giây. Ngoại trừ ngoại lệ bất thường là 7 mili giây. Ờ... không ổn.

câu trả lời hay nhất

Một cách để khấu hao chi phí đánh thức khóa và luồng là thêm hàng đợi thứ hai và triển khai phương pháp đệm đôi. Điều này có thể được thực hiện theo đợt về phía người tiêu dùng:

mẫu
std::size_t consum_all(F&& f)
{
// thu nhỏ phạm vi của khóa
{
std::lock_guard khóa(the_mutex);
std::swap(the_queue, the_queue2);
}

// xử lý tất cả các mục từ the_queue2 theo đợt
cho (auto& item : the_queue2)
{
f(mục);
}

kết quả tự động = the_queue2.size();
the_queue2.clear(); // xóa hàng đợi và bảo toàn bộ nhớ một cách hoàn hảo!
return result;
}

Mã mẫu làm việc.

Điều này không giải quyết được vấn đề về độ trễ nhưng nó cải thiện thông lượng. Nếu có sự cố xảy ra thì người tiêu dùng sẽ thấy một lô lớn mà sau đó có thể được xử lý ở tốc độ tối đa mà không cần bất kỳ chi phí khóa nào. Điều này giúp người tiêu dùng nhanh chóng nắm bắt được nhà sản xuất.

Về hàng đợi nhà sản xuất-người tiêu dùng C++ có chuyển đổi (rất) nhanh và đáng tin cậy, 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/6959023/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress