You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I do a speed test for MPMCQueue and ProducerConsumerQueue. I try to write and read 100,000,000 data in one producer thread and one consumer thread. But the speed of MPMCQueue is significantly faster than the speed of ProducerConsumerQueue. The documentation states that 'ProducerConsumerQueue' is used for single-producer and single-consumer threads, while 'MPMCQueue' is used for multi-producer and multi-consumer threads. Why is MPMCQueue faster even in the case of a single-producer and single-consumer scenario?
The text was updated successfully, but these errors were encountered:
folly::ProducerConsumerQueue<int> BufferProducerConsumerQueue(1000);
voidProducerConsumerQueueProducer() {
for (int i = 0; i < DATA_NUM; ++i) {
while (!BufferProducerConsumerQueue.write(i));
}
}
voidProducerConsumerQueueConsumer() {
int value;
for (int i = 0; i < DATA_NUM; ++i) {
while (!BufferProducerConsumerQueue.read(value));
}
}
staticvoidTestProducerConsumerQueue(benchmark::State &state){
for (auto _ : state) {
std::thread producerThread(ProducerConsumerQueueProducer); // 创建生产者线程
std::thread consumerThread(ProducerConsumerQueueConsumer); // 创建消费者线程
producerThread.join(); // 等待生产者线程结束
consumerThread.join(); // 等待消费者线程结束
}
}
BENCHMARK(TestProducerConsumerQueue)->UseRealTime()->Unit(benchmark::kSecond);
folly::MPMCQueue<int> BufferMPMCQueue(1000);
voidMPMCQueueProducer() {
for (int i = 0; i < DATA_NUM; ++i) {
while (!BufferMPMCQueue.write(i));
}
}
voidMPMCQueueConsumer() {
int value;
for (int i = 0; i < DATA_NUM; ++i) {
while (!BufferMPMCQueue.read(value));
}
}
staticvoidTestMPMCQueue(benchmark::State &state){
for (auto _ : state) {
std::thread producerThread(MPMCQueueProducer); // 创建生产者线程
std::thread consumerThread(MPMCQueueConsumer); // 创建消费者线程
producerThread.join(); // 等待生产者线程结束
consumerThread.join(); // 等待消费者线程结束
}
}
BENCHMARK(TestMPMCQueue)->UseRealTime()->Unit(benchmark::kSecond);
And the speed results is:
------------------------------------------------------------------------------
Benchmark Time CPU Iterations
------------------------------------------------------------------------------
TestProducerConsumerQueue/real_time 8.46 s 0.000 s 1
TestMPMCQueue/real_time 5.47 s 0.000 s 1
I do a speed test for
MPMCQueue
andProducerConsumerQueue
. I try to write and read 100,000,000 data in one producer thread and one consumer thread. But the speed ofMPMCQueue
is significantly faster than the speed ofProducerConsumerQueue
. The documentation states that 'ProducerConsumerQueue' is used for single-producer and single-consumer threads, while 'MPMCQueue' is used for multi-producer and multi-consumer threads. Why isMPMCQueue
faster even in the case of a single-producer and single-consumer scenario?The text was updated successfully, but these errors were encountered: