IOS多线程之NSOperation(2)

最大并发数

open var maxConcurrentOperationCount: Int

并发数就是同时执行的任务数。比如,同时开3个线程执行3个任务,并发数就是3。

但是,并发数是3,并不代表开启的线程数就是3,也有可能是4个或者5个。因为线程有可能在等待,进入了就绪状态。

执行的过程:

  1. 把操作添加到队列;
  2. 去线程池去取空闲的线程,如果没有就创建线程;
  3. 把操作交给线程池中取出的线程执行;
  4. 执行完成后,把线程再放回线程池中;
  5. 重复2,3,4直到所有的操作都执行完。

GCD的区别

GCD会自动重用线程,而 NSOperation 不会,会一直开线程。

而开太多线程反而会影响效率,我们需要自己控制

可以通过最大并发数控制

let queue = OperationQueue()
queue.maxConcurrentOperationCount = 3
for _ in 0..<10{
queue.addOperation {
sleep(1)
print("\(Thread.current)")
}
}
/*
<NSThread: 0x6000001e0e80>{number = 4, name = (null)}
<NSThread: 0x6000001e2d80>{number = 7, name = (null)}
<NSThread: 0x6000001fc340>{number = 5, name = (null)}
<NSThread: 0x6000001f8cc0>{number = 8, name = (null)}
<NSThread: 0x6000001e0e80>{number = 4, name = (null)}
*/ //打印时是3个3个打印的

队列的操作

//暂停
func suspend(){
queue.isSuspended = true
}
//继续
func resume(){
queue.isSuspended = false
}
//取消
func cancel(){
queue.cancelAllOperations()
}

Operation的状态

//取消
open var isCancelled: Bool { get }
//执行中
open var isExecuting: Bool { get }
//完成
open var isFinished: Bool { get }
//就绪
open var isReady: Bool { get }

控制Operation的状态

//启动
open func start()
//取消
open func cancel()

可以继承自定义MyOperation继承Operation类,重写startcancel方法来自己管理

let operation = MyOperation()
operation.start()
operation.cancel() class MyOperation: Operation {
override func start() {
super.start()
print("operation started")
} override func main() {
super.main()
print("operation main")
} override func cancel() {
super.cancel()
print("operation cancel")
}
} /*
operation main
operation started
operation cancel
*/

IOS多线程之NSOperation(2)的更多相关文章

  1. iOS多线程之NSOperation详解

    使用NSOperation和NSOperationQueue进行多线程开发,只要将一个NSOperation(实际开发中需要使用其子类 NSInvocationOperation,NSBlockOpe ...

  2. iOS 多线程之NSOperation篇举例详解

    这篇博客是接着总篇iOS GCD NSOperation NSThread等多线程各种举例详解写的一个支篇.总篇也包含了此文的链接.本文讲解的知识点有NSBlockOperationClick,队列, ...

  3. IOS多线程之NSOperation学习总结

    NSOperation简介 1.NSOperation的作用 配合使用NSOperation和NSOperationQueue也能实现多线程编程 2.NSOperation和NSOperationQu ...

  4. iOS多线程之NSOperation,NSOperationQueue

    使用 NSOperation的方式有两种, 一种是用定义好的两个子类: NSInvocationOperation 和 NSBlockOperation. 另一种是继承NSOperation 如果你也 ...

  5. (五十六)iOS多线程之NSOperation

    NSOpertation是一套OC的API,是对GCD进行的Cocoa抽象. NSOperation有两种不同类型的队列,主队列和自定义队列. 主队列运行于主线程上,自定义队列在后台运行. [NSBl ...

  6. iOS多线程之NSOperation和NSOperationQueue的使用

    一:NSOperation 两个子类+重写main方法 NSInvocationOperation NSBlockOperation 有个类方法 BlockOprationWith: 还有就是自己个子 ...

  7. ios多线程之NSOperation

    使用 NSOperation的方式有两种, 一种是用定义好的两个子类: NSInvocationOperation 和 NSBlockOperation. 另一种是继承NSOperation 如果你也 ...

  8. iOS多线程之8.NSOPeration的其他用法

      本文主要对NSOPeration的一些重点属性和方法做出介绍,以便大家可以更好的使用NSOPeration. 1.添加依赖 - (void)addDependency:(NSOperation * ...

  9. iOS多线程之GCD小记

    iOS多线程之GCD小记 iOS多线程方案简介 从各种资料中了解到,iOS中目前有4套多线程的方案,分别是下列4中: 1.Pthreads 这是一套可以在很多操作系统上通用的多线程API,是基于C语言 ...

  10. 多线程之NSOperation

    关于多线程会有一系列如下:多线程之概念解析 多线程之pthread, NSThread, NSOperation, GCD 多线程之NSThread 多线程之NSOperation 多线程之GCD

随机推荐

  1. [OI] Testlib

    Testlib 是用于实现 SpecialJudge 的一种方式 为了使用 Testlib,你需要在你的文件中引用 Testlib.h testlib.h 下载 使用 Testlib 程序 以 Tes ...

  2. 深入理解 Nuxt.js 中的 app:data:refresh 钩子

    title: 深入理解 Nuxt.js 中的 app:data:refresh 钩子 date: 2024/9/29 updated: 2024/9/29 author: cmdragon excer ...

  3. CF102411 ICPC 2019-2020 North-Western Russia Regional Contest题解

    A Accurate Movement 签到 M Managing Difficulties 签到 B Bad Treap 已知\(y=\sin(x)\),要求给出数组\(a[n]\),满足\(\fo ...

  4. 数列专题2 求数列的前n项和

    \({\color{Red}{欢迎到学科网下载资料学习 }}\) [ [基础过关系列]高二数学同步精品讲义与分层练习(人教A版2019)] ( https://www.zxxk.com/docpack ...

  5. threejs - js库 gui 的使用 调试开发3D效果

    // 导入 threejs import * as THREE from "three"; import { OrbitControls } from "three/ex ...

  6. kotlin协程——>异常处理

    异常处理 本节内容涵盖了异常处理与在异常上取消.我们已经知道取消协程会在挂起点抛出 CancellationException 并且它会被协程的机制所忽略.在这⾥我们会看看在取消过程中抛出异常或同 ⼀ ...

  7. 快速部署单服务器oracle12c

    docker pull docker.io/truevoly/oracle-12c mkdir -p /usr/local/oracle/data_temp chmod 777 /usr/local/ ...

  8. Chirpy+Github

    相关网址 Chirpy 示例:网页上有官方教程,我写的肯定不全 Chirpy 示例仓库:这个就是包含官方教程的那个示例的仓库 Chirpy 模板仓库:直接 fork 这个仓库,快速搭建,没有多余的东西 ...

  9. Machine Learning Week_1 Welcome

    目录 0 Welcome 0.1 Video: Welcome to Machine Learning! Transcript unfamiliar words 0.2 Reading: Machin ...

  10. 正态分布——“牛而B之”

    1 问题: 什么是正态分布,为什么这么出名和重要? 1.1 名气大 为什么叫"正态分布",也有地方叫"常态分布",这两个名字都不太直观,但如果我们各取一字变为& ...