Use dispatch_async para analisar uma matriz simultaneamente no Swift
Estou tentando analisar uma foto simultaneamente usando um thread de segundo plano do GCD. Aqui está o código que escrevi:
dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_UTILITY.value), 0)) {
for (var i = 0; i < 8; i++)
{
let color = self.photoAnalyzer.analyzeColors(imageStrips[i])
colorList.append(color)
}
}
Para esclarecimentos sobre os nomes das variáveis, aqui estão suas descrições:
photoAnalyzer
é uma instância de uma classe que escrevi chamadaAnalyzer
que contém todos os métodos para processar a imagem.
analyzeColors
é um método dentro doAnalyzer
classe que faz a maior parte da análise e retorna uma string com a cor dominante da imagem passada
imageStrips
é uma matriz deUIImage
que compõem as partes da imagem original
colorList
é uma matriz de strings que armazena os valores de retorno doanalyzeColor
método para cada parte da imagem.
O código acima é executado sequencialmente desde que ofor
loop acessa apenas uma imagem doimageList
de uma vez. O que estou tentando fazer é analisar cada imagem noimageStrips
simultaneamente, mas eu não tinha ideia de como fazer isso.
Todas as sugestões serão muito apreciadas. E se você quiser ver todo o código para me ajudar ainda mais, posso postar um link do GitHub.
EDITAR Este é o meu código atualizado para lidar com 8 processadores simultaneamente.
dispatch_apply(8, imageQueue) { numStrips -> Void in
let color = self.photoAnalyzer.analyzeColors(imageStrips[numStrips])
colorList.append(color)
}
No entanto, se eu tentar usar mais de 8, o código realmente será mais lento do que sequencialmente.