为啥 async & nio jdbc driver 没有流行起来

2023-08-14 21:25:26 +08:00
 ljzxloaf
RT ,相对于原始的 bio ,这看起来是个很自然的优化方案啊。
3706 次点击
所在节点    程序员
36 条回复
BBCCBB
2023-08-14 21:57:00 +08:00
因为异步回调, promise 这种反人类..

调用同步, 执行异步才是 java 后续的发展方向.

oracle 本来有在标准化异步的 jdbc 规范, 但有 loom 这种提案, 就放弃了, 就没必要再去搞这种反人类的回调, reactor 这种东西了..
liprais
2023-08-14 21:57:27 +08:00
优化啥了?
数据库就能 serve 那么多请求,开再多也没用
javaisthebest
2023-08-15 00:53:45 +08:00
人的大脑就不支持多线程和异步。。。同步做事情都做不明白呢
iceheart
2023-08-15 04:32:36 +08:00
有栈协程才是正道啊。
无栈的协程,难理解,难维护,难调试和追踪。用这个写业务是有点作死的节奏
chendy
2023-08-15 07:53:34 +08:00
因为提高的是资源利用率
但是节约下来的服务器成本,需要投入到人力上,而且未必够用
所以还不如招普通开发堆屎山 + 堆服务器硬抗负载
tulongtou
2023-08-15 08:05:45 +08:00
大部分 javaer 的脑子连 stream function 都玩不明白,你让他们玩 async ?
afeiche
2023-08-15 08:30:12 +08:00
回调写法反人类啊,你看 nodejs 上了 await/async 之后,写起来自然多了
cookii
2023-08-15 08:35:31 +08:00
错就错在选了 Java ,高手看不上,菜鸟学不会。
wdf1286
2023-08-15 08:42:23 +08:00
显然协程最符合人类直觉
k9982874
2023-08-15 08:49:01 +08:00
nodejs 原生支持异步调用,最后不还是整个项目在 await
iFerrari860
2023-08-15 09:07:07 +08:00
javaer 上就是 vert.x 或者 webflux 。。 流式写法确实看起来难受,另外出问题 debug 贼麻烦。。
securityCoding
2023-08-15 09:13:16 +08:00
试试 go
lysS
2023-08-15 09:14:28 +08:00
异步恶心,现在的趋势是协程的 runtime 结合异步回调,然后只需要写同步代码
wqhui
2023-08-15 09:23:44 +08:00
之前用 webflux 出 bug 的时候贼难查是什么原因,除非你提前在可能出错的地方埋好日志,而且代码写起来不能有任何阻塞,所有东西都靠回调,代码恶心的一批 emm
业务上来讲,不重要的操作异步处理就够了
从提高资源利用率上讲,还不如多部署几个应用节点
roundgis
2023-08-15 09:29:02 +08:00
要搭配

async&await

或者

coroutine
lyxeno
2023-08-15 09:32:40 +08:00
Java 的异步比 ts/js 难用多了,我也不知道为什么会有这种差异
johnniang
2023-08-15 09:36:34 +08:00
替代驱动:Reactive Relational Database Connectivity (R2DBC)

https://r2dbc.io/
abcbuzhiming
2023-08-15 12:40:52 +08:00
上面很多大佬都是从技术角度说的,但是我想换个角度谈谈:

我个人觉得,有个很重要的点各位没有 get 到。当前这种异步真的增加了什么好处吗?

我觉得没有!绝大多数情况下,你写异步代码并不能真的在用户体验层面上提升多少性能。因为相对于代码程序的运行(甭管你是 java 还是 nodejs 还是别的什么玩意,甚至你是 python 也行),数据库的执行才是慢如蜗牛,于是你用了一堆异步,最后在用户体验上体验不出来,那有什么用,那不是吃力不讨好吗?

难不难用都是其次,主要还是最终使用效果有没有好处。真有巨大的好处,当年纸片打孔编程不比今天各位写代码难多了,照样被无数人强行啃下来用
0m9ionbP8wuvs8S3
2023-08-15 12:55:11 +08:00
异步目前比较好的就是通过语言层面解决,那什么 reactive webflux 写起来太繁琐,还不如等各个 jdbc 适配 loom
photon006
2023-08-15 15:25:04 +08:00
@abcbuzhiming

调用数据库或第三方 api or rpc 都属于 io 密集型任务,这种场景更适合异步,简单举例,一个操作需要处理 5 个 sql 语句,每个耗时 1s ,同步执行累加 5 秒,异步并行总耗时只有 1 秒,对上游调用方来说差异很大。当然 java 可以多线程并发,只是更耗资源。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/965267

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX