2013-05-21 30 views
19

Tôi đang cố gắng hiểu các trường hợp sử dụng khác nhau. và sự khác biệt giữa việc sử dụng 2 thread. This là hướng dẫn tuyệt vời mà tôi đã đọc giải thích boost::thread_group.boost :: threadpool :: pool vs.boost :: thread_group

và đây là một mã Tôi đang sử dụng:

boost::threadpool::pool s_ThreadPool(GetCoreCount()); 

CFilterTask task(pFilter, // filter to run 
    boost::bind(&CFilterManagerThread::OnCompleteTask, this, _1, _2) // OnComplete sync callback   // _1 will be filter name // _2 will be error code 
       ); 

// schedule the new task - runs on the threadpool 
s_ThreadPool.schedule(task); 

đây là destructor:

s_ThreadPool.wait(0); 

bạn có thể xin giải thích?

Trả lời

40

boost::thread_group là một lớp tiện lợi để thực hiện các thao tác quản lý chuỗi trên một tập hợp các chuỗi. Ví dụ: thay vì phải lặp qua std::vector<boost::thread>, hãy gọi join() trên mỗi luồng, thread_group cung cấp chức năng thành viên thuận tiện join_all().

Với boost::thread, bất kể nó được quản lý bởi boost::thread_group, tuổi thọ của chuỗi thường phụ thuộc vào công việc mà chuỗi đang làm. Ví dụ, nếu một thread được tạo ra để thực hiện một phép tính tốn kém tính toán, thì thread có thể thoát ra khi kết quả đã được tính toán. Nếu tác phẩm ngắn ngủi, thì chi phí tạo và hủy các luồng có thể ảnh hưởng đến hiệu năng.

Mặt khác, threadpool là một mẫu, trong đó một số luồng dịch vụ một số nhiệm vụ/công việc. Tuổi thọ của luồng không được liên kết trực tiếp với thời gian tồn tại của tác vụ. Để tiếp tục với ví dụ trước, ứng dụng sẽ lên lịch tính toán tốn kém tính toán để chạy trong nhóm luồng. Công việc sẽ được xếp hàng đợi trong luồng, và một trong các chủ đề của threadpool sẽ được chọn để thực hiện công việc. Sau khi tính toán đã hoàn thành, luồng sẽ quay trở lại để đợi nhiều công việc hơn được lên lịch với threadpool.

Như được hiển thị trong ví dụ threadpool này, có thể triển khai một trình tạo luồng với boost::thread_group để quản lý thời lượng của chuỗi và boost::asio::io_service để gửi nhiệm vụ/công việc.

+0

câu trả lời rất độc đáo ... đưa ra ý tưởng chính xác – spt025