IOS多线程之线程属性的配置

简介: 版权声明:原创作品,谢绝转载!否则将追究法律责任。   设置线程堆栈的大小: 系统为每个你新创建的线程,都会为你的进程空间分配一定的内存作为该线程的堆栈。这里面有我们局部变量声明我们的方法就是一个堆栈。
版权声明:原创作品,谢绝转载!否则将追究法律责任。
 
设置线程堆栈的大小:
系统为每个你新创建的线程,都会为你的进程空间分配一定的内存作为该线程的堆栈。这里面有我们局部变量声明我们的方法就是一个堆栈。
 
如果你想改变一个给定线程的堆栈大小,你必须在创建该线程之前做一些操作。几乎所有线程技术都提供了相应的方法来设置堆栈的大小。
 
例如NSThread设置堆栈大小:
在IOS和MAC OS 10.5之后,创建初始化一个NSThread最好不要用雷类方法创建(detachNewThreadSelector:toTarget:withObject: ),因为我们要设置线程的堆栈大小,我们调用start方法之前用setStackSize:方法来设置。
 
设置线程并存储一些信息:
我们如果想让线程存储这个线特有的信息以便在方面的时候用到他并且可以在线程之间传递信息。比如我们之前说过的run loop处理事件。可以存储处理了多少次事件的次数。
NSThread的 threadDictionary方法返回一个NSMutableDictionary对象。我们可以在里面存储线程的一些信息。
 
线程的脱离状态:
有时候我们中断一个线程时候希望回收他的资源,脱离线程可以做到。与之相反的是可连接线程,他必须在推出之前必须被其他线程连接,并且可以拿到退出线程的数据。
大部分的上层线程技术默认是创建脱离线程。因为他们在线程完成时候立刻释放回收资源。
注意:当线程处于周期性工作而不被中断的时候比如保存数据到硬盘,可连接线程是最佳选择。
 
设置线程的优先级:
试想这样一个情况一个线程池里面有很多的线程。每个线程被创建的时候等级是一样的。我们假如想让某个线程先被执行可以设置这个线程的优先级高于其他线程,这样他会被先执行。
NSThread可以 setThreadPriority方法设置当前运行线程的优先级
 
设置自动释放池:
之前我们说过在线程执行的一个方法里面可以设置run loop来处理事件并且可以用一个自动释放池来清理线程代码执行后的东西。
 
IOS在他们的每个线程必须创建至少一个自动释放池。主线程默认就创建了。有自动回收机制的应用创建自动释放池也不是必须的,只是他们被忽略掉。
 
因此我们在编写线程主体入口的时候要先创建一个自动释放池。在线程结束的时候自动释放他。例如一个循环我们应该每次循环一次创建并释放该自动释放池。我们可以用这样的方法来防止我们应用程序内存占用太造成的性能问题。
 
设置异常处理:
之前提到过如果一个线程的异常未捕获,可能造成你的应用强制退出因为其他的线程也不能捕获,因此我们最好在线程的主体入口写一个捕获线程异常的函数 try/catch,用来捕获任何位置的异常。
 
设置run loop
当一个编写一个线程时候,我们可以让他执行一个长期的操作很少中断,线程完成时候退出。也可以让我们的线程放入一个循环里面,让他动态处理操作。后面这种做法就类似在线程里面加入一个run loop。你的主线程默认启动一个run loop。但是你创建自己的线程需要自己添加启动。后面我们会详细介绍。
中断线程:
我们退出一个线程推荐方法是让他在主体入口正常的退出。虽然系统API提供了直接杀死线程的方法,但是这样做会阻止线程清理内存等工作。会造成潜在的问题之前也说了。
因此我们可以设置我们线程响应取消或者退出消息。对于长时间的操作,这意味着要周期性来检查这个消息是不是到来,这样线程有机会来清理完成最终退出。我们可以用run loop的输入源来检测这个消息的到来。具体后面会详细介绍。
 

 

相关文章
|
2月前
|
安全 算法 Java
Java 多线程:线程安全与同步控制的深度解析
本文介绍了 Java 多线程开发的关键技术,涵盖线程的创建与启动、线程安全问题及其解决方案,包括 synchronized 关键字、原子类和线程间通信机制。通过示例代码讲解了多线程编程中的常见问题与优化方法,帮助开发者提升程序性能与稳定性。
110 0
|
2月前
|
数据采集 监控 调度
干货分享“用 多线程 爬取数据”:单线程 + 协程的效率反超 3 倍,这才是 Python 异步的正确打开方式
在 Python 爬虫中,多线程因 GIL 和切换开销效率低下,而协程通过用户态调度实现高并发,大幅提升爬取效率。本文详解协程原理、实战对比多线程性能,并提供最佳实践,助你掌握异步爬虫核心技术。
|
3月前
|
Java 数据挖掘 调度
Java 多线程创建零基础入门新手指南:从零开始全面学习多线程创建方法
本文从零基础角度出发,深入浅出地讲解Java多线程的创建方式。内容涵盖继承`Thread`类、实现`Runnable`接口、使用`Callable`和`Future`接口以及线程池的创建与管理等核心知识点。通过代码示例与应用场景分析,帮助读者理解每种方式的特点及适用场景,理论结合实践,轻松掌握Java多线程编程 essentials。
186 5
|
7月前
|
Python
python3多线程中使用线程睡眠
本文详细介绍了Python3多线程编程中使用线程睡眠的基本方法和应用场景。通过 `time.sleep()`函数,可以使线程暂停执行一段指定的时间,从而控制线程的执行节奏。通过实际示例演示了如何在多线程中使用线程睡眠来实现计数器和下载器功能。希望本文能帮助您更好地理解和应用Python多线程编程,提高程序的并发能力和执行效率。
194 20
|
7月前
|
SQL 数据建模 BI
【YashanDB 知识库】用 yasldr 配置 Bulkload 模式作单线程迁移 300G 的业务数据到分布式数据库,迁移任务频繁出错
问题描述 详细版本:YashanDB Server Enterprise Edition Release 23.2.4.100 x86_64 6db1237 影响范围: 离线数据迁移场景,影响业务数据入库。 外场将部分 NewCIS 的报表业务放到分布式数据库,验证 SQL 性能水平。 操作系统环境配置: 125G 内存 32C CPU 2T 的 HDD 磁盘 问题出现的步骤/操作: 1、部署崖山分布式数据库 1mm 1cn 3dn 单线启动 yasldr 数据迁移任务,设置 32 线程的 bulk load 模式 2、观察 yasldr.log 是否出现如下错
|
7月前
|
安全 Java C#
Unity多线程使用(线程池)
在C#中使用线程池需引用`System.Threading`。创建单个线程时,务必在Unity程序停止前关闭线程(如使用`Thread.Abort()`),否则可能导致崩溃。示例代码展示了如何创建和管理线程,确保在线程中执行任务并在主线程中处理结果。完整代码包括线程池队列、主线程检查及线程安全的操作队列管理,确保多线程操作的稳定性和安全性。
|
9月前
|
NoSQL Redis
单线程传奇Redis,为何引入多线程?
Redis 4.0 引入多线程支持,主要用于后台对象删除、处理阻塞命令和网络 I/O 等操作,以提高并发性和性能。尽管如此,Redis 仍保留单线程执行模型处理客户端请求,确保高效性和简单性。多线程仅用于优化后台任务,如异步删除过期对象和分担读写操作,从而提升整体性能。
147 1
|
11月前
|
存储 消息中间件 资源调度
C++ 多线程之初识多线程
这篇文章介绍了C++多线程的基本概念,包括进程和线程的定义、并发的实现方式,以及如何在C++中创建和管理线程,包括使用`std::thread`库、线程的join和detach方法,并通过示例代码展示了如何创建和使用多线程。
132 1
C++ 多线程之初识多线程
|
11月前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
180 3