Многопоточное функциональное программирование в 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.

Ответы на вопрос(2)

Ваш ответ на вопрос