请问为什么callback比async要快?
来源:5-4 Producer异步回调发送演示

weixin_慕工程3031370
2020-06-16
发了10000个数据
结果
callback total time :167
async total time :487
void asyncSend() throws ExecutionException, InterruptedException {
Producer<String, String> producer = initProducer();
//producer record
long in = System.currentTimeMillis();
for(int i = 0 ; i< 10000; i++) {
ProducerRecord<String, String> record =
new ProducerRecord<String, String>(TOPIC_NAME,"key-"+i, "sync "+System.currentTimeMillis());
Future<RecordMetadata> send = producer.send(record);
// System.out.println(send.get().toString());
}
long out = System.currentTimeMillis();
System.out.println("async total time :" + (out - in));
}
void callBackSend() throws ExecutionException, InterruptedException {
Producer<String, String> producer = initProducer();
//producer record
long in = System.currentTimeMillis();
for(int i = 0 ; i< 10000; i++) {
ProducerRecord<String, String> record =
new ProducerRecord<String, String>(TOPIC_NAME,"key-"+i, "async "+System.currentTimeMillis());
Future<RecordMetadata> send = producer.send(record, new Callback() {
@Override
public void onCompletion(RecordMetadata recordMetadata, Exception e) {
// System.out.println("partition: " + recordMetadata.partition());
}
});
}
long out = System.currentTimeMillis();
System.out.println("callback total time :" + (out - in));
}
我本来预计两个应该差不多的
写回答
1回答
-
Allen
2020-06-17
Future本来是异步执行, 但是你的async调用了get(), 相当于变成了阻塞调用啊
20
相似问题