假设我有一个程序需要一系列整数并输出它们的方块。在伪代码中,这可能看起来像:
For (i = 1; i = 10; i++){
print "i squared is" >> i^2 >> endl;
}
如果我按顺序运行,我会期望“我平方为1”,“我平方为4”,依此类推。但是,如果我并行运行它,每个线程将采用i的单个值并将其平方。不能保证i = 1的线程会先完成,所以我可能会输出:“我的平方是9”,“我的平方是81”,“我的平方是49”等伪随机顺序。
显然,并行输出更难以解释。我可以更改代码,使其打印i和i ^ 2,但即便如此,它仍然难以解释。有没有办法让输出按升序和仍然并行进行平方?这个问题看起来很通用,肯定某个人肯定已经回答过了,但我的谷歌搜索只能找到并行排序算法的结果。
答案 0 :(得分:0)
(回答我自己的问题,因为高绩效标记所有,但在评论中写了答案 - 所有信用给他)
有没有办法让输出按升序排列并且仍然可以并行进行平方?
是。定义一个长度为10的数组,并让每个线程将其值输出到数组中的相应元素。这并不总是很容易做到(你可能需要调整循环,以便它可以为的每个值独立运行),但是OP中的示例没有这个问题。在伪代码中:
db.collection.aggregate([
{ ... }, // <-- previous pipeline
{
"$project": {
"specList": {
"$arrayToObject": {
"$map": {
"input": "$specificationList.values",
"as": "el",
"in": {
"k": "$$el.key",
"v": { "$arrayElemAt": ["$$el.value", 0] }
}
}
}
}
}
}
])