IOS多线程之NSOperation(2)
IOS多线程之NSOperation(2)
最大并发数
open var maxConcurrentOperationCount: Int
并发数就是同时执行的任务数。比如,同时开3个线程执行3个任务,并发数就是3。
但是,并发数是3,并不代表开启的线程数就是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类,重写start和cancel方法来自己管理
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)的更多相关文章
- iOS多线程之NSOperation详解
使用NSOperation和NSOperationQueue进行多线程开发,只要将一个NSOperation(实际开发中需要使用其子类 NSInvocationOperation,NSBlockOpe ...
- iOS 多线程之NSOperation篇举例详解
这篇博客是接着总篇iOS GCD NSOperation NSThread等多线程各种举例详解写的一个支篇.总篇也包含了此文的链接.本文讲解的知识点有NSBlockOperationClick,队列, ...
- IOS多线程之NSOperation学习总结
NSOperation简介 1.NSOperation的作用 配合使用NSOperation和NSOperationQueue也能实现多线程编程 2.NSOperation和NSOperationQu ...
- iOS多线程之NSOperation,NSOperationQueue
使用 NSOperation的方式有两种, 一种是用定义好的两个子类: NSInvocationOperation 和 NSBlockOperation. 另一种是继承NSOperation 如果你也 ...
- (五十六)iOS多线程之NSOperation
NSOpertation是一套OC的API,是对GCD进行的Cocoa抽象. NSOperation有两种不同类型的队列,主队列和自定义队列. 主队列运行于主线程上,自定义队列在后台运行. [NSBl ...
- iOS多线程之NSOperation和NSOperationQueue的使用
一:NSOperation 两个子类+重写main方法 NSInvocationOperation NSBlockOperation 有个类方法 BlockOprationWith: 还有就是自己个子 ...
- ios多线程之NSOperation
使用 NSOperation的方式有两种, 一种是用定义好的两个子类: NSInvocationOperation 和 NSBlockOperation. 另一种是继承NSOperation 如果你也 ...
- iOS多线程之8.NSOPeration的其他用法
本文主要对NSOPeration的一些重点属性和方法做出介绍,以便大家可以更好的使用NSOPeration. 1.添加依赖 - (void)addDependency:(NSOperation * ...
- iOS多线程之GCD小记
iOS多线程之GCD小记 iOS多线程方案简介 从各种资料中了解到,iOS中目前有4套多线程的方案,分别是下列4中: 1.Pthreads 这是一套可以在很多操作系统上通用的多线程API,是基于C语言 ...
- 多线程之NSOperation
关于多线程会有一系列如下:多线程之概念解析 多线程之pthread, NSThread, NSOperation, GCD 多线程之NSThread 多线程之NSOperation 多线程之GCD
随机推荐
- [OI] 二项式期望 DP
OSU OSU yet Another OSU yet yet Another OSU OSU 的题目是这样的:有一些相邻的块,给定每一个块的联通概率,每个连通块对答案有 \(size^{3}\) 的 ...
- Springboot 项目配置 HTTPS
生成证书 输入命令 keytool -genkeypair -alias "boot" -keyalg "RSA" -keystore "boot.k ...
- Hadoop完全分布式搭建,基于乌班图系统
因为现在集成的工具很多,建议在接触这一块的过程中还是自己找几个主机,亲手搭一遍集群,更好的熟悉底层!本文只是搭建的过程没有理论!手搭集群时先将各节点网络.ssh配置好!然后在一台机子上操作配置文件,直 ...
- 微信小程序点击按钮进行页面跳转
下面是wxml代码 <button type="primary" bindtap="go">跳转到list页面</button> 下面是 ...
- Oracle ASM磁盘组配置、日常运维、故障处理等操作资料汇总
ASM(自动存储管理)在数据库中是非常重要的组成部分,它可以为磁盘提供统一的存储管理.提高磁盘访问的性能和可用性.简化管理复杂度,从而为数据库的运行提供更好的支持. 这里就为大家整理了墨天轮数据社区上 ...
- 我在大厂做 CR——为什么建议使用枚举来替换布尔值
使用枚举替换布尔值主要基于以下几个原因 ● 可读性 ● 可拓展性 ● 安全防控 可读性 我们会定义 boolean 类型(true 或 false)作为方法参数,虽然比较简洁,但有时候参数的含义往往不 ...
- 在 Kubernetes 中基于 StatefulSet 部署 MySQL(上)
大家好,我是老 Z! 本文实现了 MySQL 数据库在基于 KubeSphere 部署的 K8s 集群上的安装部署,部署方式采用了图形化这种形式.下一篇文章将会涉及 GitOps 的基础操作,部署过程 ...
- python之调用高德、百度api解析经纬度地址
调用高德 # 高德地图根据经纬度反查地址,每天只能调用5000次 def gaode_excute_single_query(coordStrings ,currentkey='你自己的api-key ...
- Python 潮流周刊#75:用 Python 开发 NoSQL 数据库(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- 【转载】《扩散模型是实时游戏引擎(Diffusion Models Are Real-Time Game Engines)》的论文,向我们展示了世界上第一个完全由神经模型驱动的游戏引擎,GameNGen。这也是历史上首次,AI能在不借助其他游戏引擎的情况下,为玩家生成实时游戏了,并且在单个TPU上速度可以达到每秒20帧
地址: https://www.youtube.com/watch?v=VniPJII6ak0 8月29号,谷歌DeepMind发布了一篇名为<扩散模型是实时游戏引擎(Diffusion Mod ...