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
随机推荐
- .net 到底行不行!2000 人在线的客服系统真实屏录演示(附技术详解) 📹
业余时间用 .net 写了一个免费的在线客服系统:升讯威在线客服与营销系统. 时常有朋友问我性能方面的问题,正好有一个真实客户,在线的访客数量达到了 2000 人.在争得客户同意后,我录了一个视频. ...
- [OI] pb_ds
using namespace __gnu_pbds; Luogu Post#39 1.堆 1.1 基本信息 头文件 #include <ext/pb_ds/priority_queue.hpp ...
- HuggingChat macOS 版现已发布
Hugging Face 的开源聊天应用程序 Hugging Chat,现已推出适用于 macOS 的版本. 主要特点 Hugging Chat macOS 版本具有以下亮点: 强大的模型支持: 用户 ...
- 【赵渝强老师】Docker Swarm实现服务的滚动更新
一.什么是Docker Swarm? Docker Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机 ...
- 2021 IT运维巡展北京站圆满落幕,北京智和信通荣获IT运维样板工程
10月21日,以"数智转型 运维赋能"为主题的"2021(第十二届)IT运维巡展北京站"圆满落幕.会上行业专家.企业代表以及用户代表等共聚一堂,探讨数智时代下I ...
- 日干算命api接口_json数据_性格/爱情/事业/财运/健康运势免费接口
该API接口基于传统的八字学原理,通过用户提供的日干信息,为用户提供性格.爱情.事业.财运和健康等多方面的运势分析和建议.以下是该接口的详细介绍: 一.功能概述 性格分析:根据用户的日干信 ...
- 墨天轮专访星环科技刘熙:“向量热”背后的冷思考,Hippo如何打造“先发”优势?
导读: 深耕技术研发数十载,坚持自主可控发展路.星环科技一路砥砺前行.坚持创新为先,建设了全面的产品矩阵,并于2022年作为首个独立基础软件产品公司成功上市.星环科技在今年的向星力•未来技术大会上发布 ...
- iOS开发中UITextView使用小结
最近项目开发中用到了多行文本框限制文字输入个数限制,之前的话在textViewDidChange方法中截取超出字数就可以.测试人员发现在拼音转汉字的过程中,YYTextView不会二次确认textVi ...
- oracle下拼同比环比查询sql方法
拼接方法: /// <summary> /// 生成计算同比环比查询语句 /// table:表名称:statColumns:要统计的值字段;yearColumn:年份字段名:monthC ...
- 初识GO语言--流程控制