静海集团网站建设,淮南服装网站建设费用,深圳十大装修公司,织梦网站备案联通光纤限制连接数jOOQ是在Java中执行SQL的好方法#xff0c;而Quasar光纤带来了大大提高的并发性 我们很高兴在平行世界的 Fabio Tudone的jOOQ博客上宣布另一个非常有趣的来宾帖子。 Parallel Universe开发了一个开放源代码堆栈#xff0c;使开发人员可以轻松地在JVM上对… 联通光纤限制连接数 jOOQ是在Java中执行SQL的好方法而Quasar光纤带来了大大提高的并发性 我们很高兴在平行世界的 Fabio Tudone的jOOQ博客上宣布另一个非常有趣的来宾帖子。 Parallel Universe开发了一个开放源代码堆栈使开发人员可以轻松地在JVM上对极端的并发应用程序进行编码。 使用Parallel Universe堆栈您可以构建与现代硬件协调工作的软件而不必动fight动脑同时保持您的编程语言和简单熟悉的编程风格。 Fabio Tudone开发和维护Quasar集成模块这是Comsat项目的一部分。 在加入Parallel Universe团队之前他参与了基于云的企业内容治理平台的开发工作并领导了几年的开发工作。在整个职业生涯中他一直在编写JVM软件。 他的兴趣包括Dev和DevOps实践可伸缩性并发和功能编程以及运行时平台。 他自然好奇喜欢探索他喜欢从人地方和文化中收集知识和理解。 他还对意识练习感兴趣喜欢写各种各样的东西。 Quasar作为Comsat项目的一部分具有JDBC和jOOQ的集成因此让我们来看看它的内部。 JDBCjOOQ和Quasar comsat-jdbc提供了JDBC API的光纤阻塞包装程序因此您可以在光纤而不是常规Java线程中使用连接。 为什么要这么做 因为光纤是轻量级线程并且与正在运行的JVM中的线程相比 您可以拥有更多的光纤。 “更多”意味着我们要说的是数百万人而不是数千人。 这意味着在等待JDBC执行时您的系统中有更多的并行能力来并行执行其他操作无论是并发/并行计算例如在高度可靠的类Quasar Erlang类actor系统中 交换actor消息 阻止I / O例如 服务 Web 请求 调用微服务 通过光纤NIO读取文件或访问其他启用光纤的数据源如MongoDB 。 如果您的数据库能忍受它而更多的常规线程不会使您的系统崩溃甚至您甚至可以增加光纤JDBC池请参阅附加点后面的等待线 并发送更多并发的jOOQ命令。 由于jOOQ使用JDBC连接访问数据库因此在光纤上运行jOOQ就像引入comsat-jooq依赖项并将启用光纤的JDBC连接传递到jOOQ上下文一样简单 import java.sql.Connection;
import static org.jooq.impl.DSL.*;// ...Connecton conn FiberDataSource.wrap(dataSource).getConnection();
DSLContext create DSL.using(connection);// ... 当然您也可以将ConnectionProvider配置为从FiberDataSource获取连接。 从这一刻起您可以使用常规的jOOQ一切都会在光纤阻塞模式下发生而不是在线程阻塞下发生。 而已。 不真的 绝对没有其他东西了您将继续使用出色的jOOQ仅使用效率更高的光纤而不是线程。 Quasar是一个好公民不会强迫您使用新的API特别是当原始API很好时这很好。 由于JVM 目前不支持可用于实现轻量级线程的本机绿色线程或延续 因此Quasar通过字节码检测实现了延续以及它们之上的光纤。 这可以在编译时完成但是使用Quasar的代理通常更方便尤其是在检测第三方库时因此这是一个基于Dropwizard的Gradle示例项目 其中还包括Quasar代理设置不要忘了Capsule 这是一种非常出色的Java部署工具可满足各种需求这无疑使使用Quasar和代理变得轻而易举。 该示例未使用所有的jOOQ功能而是属于SQL构建用例 用于查询和CRUD但是建议您对其进行更改以适合您的需求。 without-comsat分支包含一个线程阻止版本因此您可以比较并查看与Comsat版本的最小差异。 排队等候在哪里 您可能现在想知道好的但是JDBC是一个线程阻塞 APIQuasar如何将其转换为光纤 阻塞 API 因为JDBC没有异步模式所以Quasar在后台使用线程池光纤在该线程池中分派JDBC操作并且在JDBC操作完成后将其解冻并安排恢复有关更多信息请参阅Quasar的集成模式信息。 是的这是讨厌的等待行 等待线程池执行的JDBC命令。 尽管您并未将数据库并行性提高到超过JDBC线程池的大小但是即使您仍在使用简单且熟悉的阻塞API也不会损害光纤。 您仍然可以拥有数百万条纤维。 是否可以改善总体状况 没有标准的异步Java RDBMS API我们将无能为力。 但是如果数据库是您的瓶颈那么这可能根本不重要。 关于此主题有好几篇不错的文章和讨论 该论据等于确定您要将等待线移到哪里。 好处巧妙的jOOQ集成在幕后 目前Quasar需要开发人员或集成商告诉它要进行检测的内容尽管正在进行自动检测此功能取决于Java 9之前不会发布的一些较小的JRE更改。 如果您可以方便地更改源代码或已编译的类则可以使用Suspendable注释方法或者让它们throws SuspendExecution Suspendable便足够了但是库通常不是这种情况。 但是可以在META-INF/suspendables和META-INF/suspendable-supers中分别列出具有要检测的固定名称的方法分别用于可以具有可挂起实现的具体方法和抽象/接口方法。 如果有很多或涉及代码生成则可以编写SuspendableClassifier随集成一起提供并在Quasar的SPI中注册它以提供其他检测逻辑请参见jOOQs 。 SuspendableClassifier的工作是在检测阶段检查有关运行时类路径中每个方法的签名信息并确定该方法是否可挂起是否可以挂起是否可以实现或不确定。 其他一些分类器稍后可能会说“可悬浮”或“可悬浮-超级”。 总结一下 好吧……只需享受高效纤维上的出色jOOQ 翻译自: https://www.javacodegeeks.com/2015/06/querying-your-database-from-millions-of-fibers-rather-than-thousands-of-threads.html联通光纤限制连接数