我分析了一下 vertx 的 mysql、postgresql 异步客户端为什么低效?
目前看到三个原因:
1. 在执行 sql 时每次都要去跟连接池打交道,lealone 的异步客户端是不需要的;
2. 应用的代码连续调用 SqlClient.query(sql).execute(),哪怕是异步的,vertx 也不知道去动态优化一下,每次都只发一条 sql 对应的数据包, lealone 会动态看看任务队列里还有没有更多任务要处理,如果有就先不发数据包,而是攒够了几个再通过 SocketChannel.write(ByteBuffer[] srcs) 去写;
3. vertx 的 eventloop-thread 在执行到应用代码的回调函数时,线程的堆栈深度达到了70+,而 lealone 的 eventloop-thread 堆栈深度才20+,说明它的调度器更复杂需要执行的代码更多。
当然,异步客户端只是影响整体性能的因素之一,份量也没那么重,关键还是看数据库自身的处理时间。
