当我的应用程序与IO(数据库,第三个API,…(交互时,我使用Async作为Flink的推荐:https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/operators/asyncio.html.但我的应用程序通常与DB交互,我应该一直使用异步吗?
我有很多问题:
- 如果我使用async(completablefuture(,那么我的应用程序不会像使用sync代码时那样被阻止=>就性能而言,异步代码是更好的同步代码吗
- 如果我使用同步代码并增加并行性,性能如何
- 当我使用异步代码时,过了一段时间,我的应用程序抛出异常";邮箱处于CLOSED状态,但对于put操作需要处于OPEN状态";。看起来它与打开许多线程有关
使用异步i/o更好,原因如下:
- 更好的资源利用率。如果您发出同步请求,那么一个任务一次只处理一个请求。使用异步请求,单个任务可以处理数十个运行中的请求
- 当您的用户代码被阻止等待对同步请求的响应时,该操作员无法参与检查点操作。在最好的情况下,这会使检查点指向速度变慢,并可能导致检查点超时和作业失败
是的,您可以通过提高并行度来实现同步i/o。但这是在向一个有更好解决方案的问题投入资源。
至于邮箱问题,我认为只有当作业关闭时才会发生这种情况。我认为这是导致工作失败的其他问题的副作用。也许可以在日志中四处查看其他迹象。