したがって、Grand Central Dispatchを使用して練習するCLIとしてSwift 3にいくつかのコードを書いています。GCDを使用するSwift CLIコードは、並行性を使用しないコードと同じ速度で実行されるのはなぜですか?
考えられるのは、それぞれが100000000の値で満たされた3つの配列があるということです。私は配列のすべての数を合計して出力する関数を持っています。そして、これらの配列の合計を時間測定する2つの関数がさらにあります。 1つは配列ごとに3回sum関数を実行します。他には、独自の非同期上の各アレイ上のsum関数を実行します ここでは、コードです(スレッド?,派遣?,ないように注意してくださいどのような言葉ここに使用する。):
import Foundation
func sum(array a: [Int]) {
var suma = 0
for n in a {
suma += n
}
print(suma)
}
func gcd(a: [Int], b: [Int], c: [Int]) {
let queue = DispatchQueue(label: "com.apple.queue")
let group = DispatchGroup()
let methodStart = Date()
queue.async(group: group, execute: {
sum(array: a)
})
queue.async(group: group, execute: {
sum(array: b)
})
queue.async(group: group, execute: {
sum(array: c)
})
group.notify(queue: .main) {
let methodFinish = Date()
let executionTime = methodFinish.timeIntervalSince(methodStart)
print("GCD Exectuion Time: \(executionTime)")
}
}
func non_gcd(a: [Int], b: [Int], c: [Int]) {
let methodStart = Date()
sum(array: a)
sum(array: b)
sum(array: c)
let methodFinish = Date()
let executionTime = methodFinish.timeIntervalSince(methodStart)
print("Non_GCD Exectuion Time: \(executionTime)")
}
var a = [Int]()
var b = [Int]()
var c = [Int]()
// fill each array with 0 to 1 mil - 1
for i in 0..<100000000 {
a.append(i)
b.append(i+1)
c.append(i+2)
}
non_gcd(a: a, b: b, c: c)
gcd(a: a, b: b, c: c)
dispatchMain()
そして、ここでは、あなたがそれを見ることができる出力ですほぼ同じ時刻に実行されます:
4999999950000000
5000000050000000
5000000150000000
Non_GCD Execution Time: 1.15053302049637
4999999950000000
5000000050000000
5000000150000000
GCD Execution Time: 1.16769099235535
私はなぜそれがほぼ同じ時間になっているのか興味がありますか? 私は、並行プログラミングが物事をより速くすると考えました。私は何か重要なものを見逃していると思う。
ありがとうございます! gcdコードが2倍速くなりました! – jped