libuvを使用して生産者と消費者モデルを実現
2802 ワード
生産者と消費者モデル(Consumer+Producer model)
時間のかかる操作(本番スレッド)を1つ以上の追加スレッドに割り当てて実行(消費スレッド)し、本番スレッドの応答速度(同時能力)を向上させるために使用します.
定義#テイギ#
プロダクション
消費
時間のかかる操作(本番スレッド)を1つ以上の追加スレッドに割り当てて実行(消費スレッド)し、本番スレッドの応答速度(同時能力)を向上させるために使用します.
定義#テイギ#
1 typedef std::unique_ptr<Work> WorkPtr;
2 std::queue<WorkPtr> work_queue;
3 uv_mutex_t mutex;
4 uv_cond_t cond;
プロダクション
1 //adding new work
2 WorkPtr newWork(new Work);
3 uv_mutex_lock(&mutex);
4 work_queue.push(std::move(new_work));
5 uv_cond_signal(&cond);
6 uv_mutex_unlock(&mutex);
消費
1 while(true)
2 {
3 //copying work that has to be done
4 uv_mutex_lock(&mutex);
5 while(work_queue.empty())
6 {
7 uv_cond_wait(&cv, &mutex);
8 }
9 WorkPtr work;
10 work.swap(work_queue.front());
11 work_queue.pop();
12 uv_mutex_unlock(&mutex);
13 //doing work ...
14 }