0

我正在尝试使用 GPars 运行并行 sql 查询。但不知何故,它并没有像我预期的那样工作。由于我对 groovy/java 并发比较陌生,我不确定如何解决我的问题。

我遵循代码:

    def rows = this.sql.rows(
        "SELECT a_id, b_id FROM data_ids LIMIT 10 OFFSET 10"
    )

使用此代码,我得到一个 ID 列表。现在我想为每个加载的 id 加载数据,这应该并行发生以提高我的性能,因为我有一个大型数据库。

要获取详细数据,我使用以下代码:

GParsPool.withPool() {
result = rows.collectParallel {
    // 2. Get the data for each source and save it in an array.
    def tmpData = [:]
    def row = it

    sql.withTransaction {
        if (row.a_id != null) {
            tmpData.a = sql.firstRow("SELECT * FROM data_a WHERE id = '" + row.a_id + "'")
        }

        if (row.b_id != null) {
            tmpData.b = sql.firstRow("SELECT * FROM data_b WHERE id = '" + row.b_id + "'")
        }
    }

    return tmpData
}

// 3. Return the loaded data.
return result

现在我运行代码,一切正常,除了代码没有并行执行。使用 JProfiler 我可以看到我已经阻塞了线程和等待线程,但是 0 个可运行线程。

谢谢你的帮助。我需要更多信息,我会提供给他们:)

丹尼尔

4

0 回答 0