读深入理解高并发编程后相关总结
线程池
线程池构造方法
Executors 类可以方便构造常用的线程池。
底层真正调用的就两个
ThreadPoolExecutor
|
|
ForkJoinPool
Executors 类可以方便构造常用的线程池。
底层真正调用的就两个
ThreadPoolExecutor
|
|
ForkJoinPool
Oracle 是可以支持 中文空格的(\u3000)。因此 shardingSphere 的解析也需要支持。
查询 antlr4 的定义,首先我们遇到中文空格要像遇到英文空格一样跳过。
WS
: [ \t\r\n\u3000] + ->skip
;
其次还需要将自定义的字符中排除 \u3000 没有找到正确的排除方法。因此考虑在范围定义中跳过 \u3000
IDENTIFIER_
: [A-Za-z\u0080-\u2FFF\u3001-\uFF0B\uFF0D-\uFFFF]+[A-Za-z_$#0-9\u0080-\u2FFF\u3001-\uFF0B\uFF0D-\uFFFF]*
;
完美解决
OPE 加密算法全称是 Order Preserving Encryption。加密后的内容依然具有原始数据的顺序性,如果实现了该算法后,SQL 可以支持密文的 range 查询和排序。
https://github.com/aymanmadkour/ope 该开源代码是 ope 的算法实现,可以实现数字,字符串的加密有序性。
今天遇到一个奇怪的问题,我将运行中的 statement 信息缓存到内存集合中,通过另一个线程调用 statement.cancle() 接口,发现无论如何都取消不了,需要等到 statment 运行完,才能取消,可是这个取消已经没有意义了。
我的代码如下:
|
|
我发现 debug 无论如何也走不下去,于是我不断点,每次卡住的时候就 dump 出结果
项目地址: https://github.com/brettwooldridge/HikariCP
“Simplicity is prerequisite for reliability.” - Edsger Dijkstra
最先强调的就是简单,扁平,性能,做了 字节码级别的优化。 配置简单,很多东西选择不做,例如 statement 缓存。
pool size 比想象的要小的多,这样更能拥有更好的性能。因为单 cpu 并非并行,上下文切换需要时间,另外查询的位置需要来回切换等等。 不过 IO wait 比较大时,那么并发时能够提升的。 另外对于大事务和短事务,比较难以协调,这时候最好搞两个 pool。
考虑编译起来,然后运行 test 查看代码逻辑
通过 IDEA 运行时发现总会报 Error occurred during initialization of boot layer FindException: Module not found 后来发现 mvn clean 之后,可以运行,但是有部分代码是会在编译阶段被更改,因此还得 install 之后在跑 但是 idea 运行之前会 build 然后就改变了 target 下部分代码。 所以需要勾选运行前不 build 即可解决问题。