本篇内容多线程相关
一.Operation的执行任务方式
使用BlockOperation,代码如下:
func testBlockOp() {
//任务
let op = BlockOperation()
op.addExecutionBlock {
for i in 0...10{
print("A--\(i)")
}
}
op.addExecutionBlock {
for i in 0...20{
print("B--\(i)")
}
}
op.addExecutionBlock {
for i in 0...30{
print("C--\(i)")
}
}
op.start()
//后续测试代码
print("end")
}
打印结果为op的三个具体任务完成之后,才打印后续测试代码end.由此证明Operation的执行方式为串行.
二.Operation依赖关系
使用OperationQueue测试依赖关系,代码如下:
//测试op依赖关系
//A,B - C
//C,D - E
func testDependency(){
let opA = BlockOperation()
let opB = BlockOperation()
let opC = BlockOperation()
let opD = BlockOperation()
let opE = BlockOperation()
opA.addExecutionBlock {
for i in 0...10{
if i == 10{
print("A--\(i)")
}
}
}
opB.addExecutionBlock {
for i in 0...10{
if i == 10{
print("B--\(i)")
}
}
}
opC.addExecutionBlock {
for i in 0...10{
if i == 10{
print("C--\(i)")
}
}
}
opD.addExecutionBlock {
for i in 0...10{
if i == 10{
print("D--\(i)")
}
}
}
opE.addExecutionBlock {
for i in 0...10{
if i == 10{
print("E--\(i)")
}
}
}
opC.addDependency(opA)
opC.addDependency(opB)
opE.addDependency(opC)
opE.addDependency(opD)
let queue = OperationQueue()
queue.maxConcurrentOperationCount = 6
queue.addOperations([opA,opB,opC,opD,opE], waitUntilFinished: false)
print("end")
}
打印结果为与预设的依赖关系一致.
三.Operation优先级
使用OperationQueue测试依赖关系,代码如下:
func testQueuePriority(){
let opA = BlockOperation()
let opB = BlockOperation()
let opC = BlockOperation()
opA.addExecutionBlock {
for i in 0...10{
print("A--\(i)")
}
}
opB.addExecutionBlock {
for i in 0...10{
print("B--\(i)")
}
}
opC.addExecutionBlock {
for i in 0...10{
print("C--\(i)")
}
}
opA.queuePriority = .low
opB.queuePriority = .high
opC.queuePriority = .normal
let queue = OperationQueue()
queue.maxConcurrentOperationCount = 2
queue.addOperations([opA, opB, opC], waitUntilFinished: false)
}
根据打印结果总结:
- 队列的并发数<任务个数, 先执行任务的队列优先级高的.
- 队列的并发数>任务个数, 所有任务一起执行.