加入收藏 | 设为首页 | 会员中心 | 我要投稿 荆门站长网 (https://www.0724zz.cn/)- 图像技术、建站、AI硬件、智能营销、数据搜素!
当前位置: 首页 > 创业 > 经验 > 正文

MySQL客户端DBeaver

发布时间:2020-12-05 13:27:49 所属栏目:经验 来源:互联网
导读:这里我们定义个需要4个阶段完成的大任务,每个阶段需要3个小任务,针对这些小任务,我们分别起3个线程来执行这些小任务,查看输出结果为: Thread 2: phase: 0 Thread 0: phase: 0 Thread 1: phase: 0 ==phase: 0 finished== Thread 2: phase: 1 Thread 1: p

这里我们定义个需要4个阶段完成的大任务,每个阶段需要3个小任务,针对这些小任务,我们分别起3个线程来执行这些小任务,查看输出结果为:

  • Thread 2: phase: 0
  • Thread 0: phase: 0
  • Thread 1: phase: 0
  • ==phase: 0 finished==
  • Thread 2: phase: 1
  • Thread 1: phase: 1
  • Thread 0: phase: 1
  • ==phase: 1 finished==
  • Thread 1: phase: 2
  • Thread 2: phase: 2
  • Thread 0: phase: 2
  • ==phase: 2 finished==
  • Thread 1: phase: 3
  • Thread 0: phase: 3
  • Thread 2: phase: 3
  • ==phase: 3 finished==

可以看到,每个阶段都是三个线程都完成来才进入下一个阶段。这是怎么实现的呢?

Phaser原理猜测

结合AQS的原理,大概猜测一下Phaser的实现原理:

  • 首先,需要存储当前阶段phase、当前阶段的任务数(参与者)parties、未完成参与者的数量,这三个变量我们可以放在一个变量state中存储。
  • 其次,需要一个队列存储先完成的参与者,当最后一个参与者完成任务时,需要唤醒队列中的参与者。

结合上面的案例带入:初始时当前阶段为0,参与者为3个,未完成参与者数为3;

  • 第一个线程执行到 phaser.arriveAndAwaitAdvance(); 时进入队列;
  • 第二个线程执行到 phaser.arriveAndAwaitadvance(); 时进入队列;
  • 第三个线程执行到 phaser.arriveAndAwaitadvance(); 时先执行这个阶段的总结 onAdvance(), 再唤醒签名两个线程继续执行下一个阶段的任务。

基于这样的一个思路,整体能说的通,至于是不是这样?让我们一起来看源码吧。
 

在Windows上,有很多的MySQL客户端,但是在Linux上的好用的、兼容性好的可不多。官方的mysql-bench是一个不错的选择,但是依赖太多了。我使用Manjaro就是因为它的简介,不喜欢安装太多的东西。

后面发现DBeaver,非常强大易用的数据库管理和开发工具。用了好几年了,一直都没有换。

支持连接的数据库:MySQL、PostgreSQL、MariaDB、SQLite、Oracle、Db2、SQL Server、Sybase、MSAccess、Teradata、Firebird、Derby 等等。商业版本更是可以支持各种 NoSQL 和大数据平台:MongoDB、InfluxDB、Apache Cassandra、Redis、Apache Hive 等。

(编辑:荆门站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读