我正在尝试使用 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 个可运行线程。
谢谢你的帮助。我需要更多信息,我会提供给他们:)
丹尼尔