Многопоточное функциональное программирование в Swift
В последнее время я манипулировал массивами байтов в Swift 2.1, и я часто нахожу, что пишу такой код:
// code to add functions to a [UInt8] object
extension CollectionType where Generator.Element == UInt8 {
func xor(with byte: UInt8) -> [UInt8] {
return map { $0 ^ byte }
}
}
// example usage: [67, 108].xor(with: 0) == [67, 108]
Есть ли простой способ распараллелить этоmap
вызовите, чтобы несколько потоков могли одновременно работать с неперекрывающимися областями массива?
Я мог бы написать код, чтобы вручную разделить массив на подмассивы и вызватьmap
на каждом под-массиве в отдельных потоках. Но мне интересно, существует ли какая-либо структура в Swift для автоматического деления, так какmap
это функциональный вызов, который может работать в поточно-безопасной среде без побочных эффектов.
Уточняющие заметки:
Код должен работать только на[UInt8]
объект, не обязательно каждыйCollectionType
.Я пишу этот код только для изучения Swift, а не для реального ввода. В конце концов, xor работает очень быстро без какого-либо распараллеливания.Если это абсолютно необходимо, вышеуказанную функцию можно увидеть в контекстеВотгде он используется для решения Set 1, Challenge 3 изMatasano Crypto Challenges.