godoway 最近的时间轴更新
neet 不知道怎么找工作
2015-11-03 18:12:01 +08:00
godoway

godoway

V2EX 第 93949 号会员,加入于 2015-01-26 21:12:41 +08:00
今日活跃度排名 13304
godoway 最近回复了
2021-01-06 16:40:28 +08:00
回复了 kaka6 创建的主题 .NET 还有人用.Net 吗,亲测.Net5 性能飞升
.net 没有源码绑定,开发体验上有点不友好,想要知道某接口有哪些实现还要去翻文档才能看到类的层级。
除开这个外,其他体验还行。
@tctc4869 虽然不太了解,不过核心思路一样的。就是非阻塞且耗时短的都可以交给 eventloop,阻塞或耗时长的都要交给 worker 。
例如你有一个计算很久的代码,如果交给 event loop 那么这个 event loop 就没法去处理其他了,所以要用 worker 。
其实 tcp 部分把他当成 netty 就是了
@tctc4869 我想说 jdbc-client 的实现就是在 worker 线程池跑查询,获取结果后在你调用的线程(eventloop)回调。
而 executeBlocking(Handler<Promise<T>> blockingCodeHandler, Handler<AsyncResult<T>> resultHandler)
这个方法干的就是这个,blockinghandler 在 worker 线程上执行,result 在你当前调用线程执行。
worker verticle 的话则是启用一个绑定了 worker 线程的 verticle,也就是里面的所有操作占用的都是 worker 线程而非 eventloop 。
所以使用传统 jdbc 的场合有两条路给你封装,一个是利用 executeBlocking,一个是封装成 worker verticle 。
PS. postgresql 建议可以考虑使用 vertx-pg-client,这个是异步的,不过还不是很完善就是了。
@tctc4869 忘了提还有一个 vertx.executeBlock
@tctc4869 官方有一个 JDBC client,
另外自己接 mybatis 之类的需要 worker verticle
然后通过 eventbus 通讯(这部分可以用 codegen 生成 service proxy 代码)
@tctc4869 你是指 route 的 block handler 么
一般来说不会用到这个,这个是到 worker 线程池里面拿一条线程来处理请求了。
正常来说请求的处理应该也是尽量使用 event loop 来处理。
在使用传统 jdbc 场合按官方的设计是使用 worker 线程处理请求数据库然后再传递到 event loop 线程。
其实就是熟悉的 netty 里的 event loop 和业务线程池组合的玩法。
2020-03-23 17:25:42 +08:00
回复了 JiZhiDeboy 创建的主题 Vue.js vue history 模式 tomcat 问题
把 404 指向 index 就行了,大部分 spa 都是这样
2020-03-04 18:16:20 +08:00
回复了 Freeego 创建的主题 程序员 Java 有没有什么好办法做 Map 参数校验?
问一下 map 转对象( jackson 序列化之类)再校验,这思路是否可行
2020-02-20 18:18:34 +08:00
回复了 rqxiao 创建的主题 程序员 Java 中 list 一个集合的展示
试着写了一下
final Set<String> columns = list.stream().map(Record::getCode).collect(Collectors.toSet());
list.stream()
.collect(Collectors.groupingBy(Record::getGroup))
.entrySet().stream()
.map(entry -> {
List<Record> tmp = entry.getValue();
Collector<Record, Map<String, Integer>, Map<String, Integer>> collector = Collector.of(
() -> columns.stream().collect(Collectors.toMap(col -> col, count -> 0)),
(map, record) -> {
String code = record.getCode();
map.put(code, map.getOrDefault(code, 0) + 1);
},
(m, sm) -> m
);
Map<String, Integer> row = tmp.stream().collect(collector);
return new HashMap.SimpleEntry<>(entry.getKey(), row);
})
.forEach(System.out::println);
输出:
组 2={code3=1, code2=0, code1=1}
组 1={code3=0, code2=1, code1=1}
关于   ·   帮助文档   ·   博客   ·   nftychat   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3932 人在线   最高记录 5634   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 20ms · UTC 05:32 · PVG 13:32 · LAX 22:32 · JFK 01:32
Developed with CodeLauncher
♥ Do have faith in what you're doing.