pkg install clang
pkg install swift
(2) Test Grand Central Dispatch - concurrent queue
- Shell script Select all
cd $HOME
cat >$HOME/concurrentqueue.swift <<'HEREEOF'
/*
# Concurrent Programming with Grand Central Dispatch in Swift 5
*/
import Foundation
let globalQueue = DispatchQueue.global(qos: .userInitiated)
func trace(task: Int) {
// Generates a random integer in the [0, task] range
print("Task \(task) started")
sleep( UInt32.random(in: 0...UInt32(task)) )
print("Task \(task) completed")
}
print("Concurrent queue, synchronous execution")
for i in 1...5 {
print("Submitting task \(i)")
globalQueue.sync {
trace(task: i)
}
}
print("\nConcurrent queue, asynchronous execution")
for i in 6...9 {
print("Submitting task \(i)")
globalQueue.async {
trace(task: i)
}
}
sleep(10)
print("Program ended")
HEREEOF
# test
swiftc concurrentqueue.swift
./concurrentqueue
(3) Test Grand Central Dispatch - serial queue
- Shell script Select all
cd $HOME
cat >$HOME/serialqueue.swift <<'HEREEOF'
/*
# Concurrent Programming with Grand Central Dispatch in Swift 5
*/
import Foundation
let serialQueue = DispatchQueue(label: "com.mycompany.demo.serial")
func trace(task: Int) {
// Generates a random integer in the [0, task] range
print("Task \(task) started")
sleep( UInt32.random(in: 0...UInt32(task)) )
print("Task \(task) completed")
}
print("\nSerial queue, synchronous execution")
for i in 1...5 {
print("Submitting task \(i)")
serialQueue.sync {
trace(task: i)
}
}
print("\nSerial queue, asynchronous execution")
for i in 6...9 {
print("Submitting task \(i)")
serialQueue.async {
trace(task: i)
}
}
sleep(25)
print("Program ended")
HEREEOF
# test
swiftc serialqueue.swift
./serialqueue
No comments:
Post a Comment