Threading Programming Guide:Thread Management
Thread Cost
创建线程是有开销的,这些开销主要包括空间上的开销以及时间上的开销:在kernel里面分配存储空间,用来存储线程相关的数据和属性;线程的栈空间;线程创建的时间。总结如下:
| Item | Approximate Cost | Notes |
| kernel数据结构 | 大约1KB | 主要用来存储线程相关的数据以及属性,这块内存大部分使用的是wired memory,因此不能被交换到disk上 |
| 栈空间 | 辅助线程默认512KB;MAC OSX 上主线程默认8MB;iOS上主线程默认1MB | 对于辅助线程来说,最小的栈空间是16KB,并且栈空间必须是4KB的倍数;栈空间只有在线程真正运行时才会被分配 |
| 创建时间 | 大约90ms | 这个时间依赖具体的机器,不能作为一个绝对的数值 |
注意项:因为Operation Object底层受到了内核支持,并且使用线程池,因此使用Operation Object创建线程会更快。
Creating a Thread
创建线程有两种方式,一种是使用NSThread类来创建,另一种是使用POSIX线程来创建。这里需要注意的是使用NSThread类创建的线程(或者其他类似的方法,比如NSObject的performSelectorOnBackground方法)都是detach线程,线程运行结束之后,线程相关的资源就会被系统回收;而POSIX线程创建的时候,如果没有特别指定,默认是joinable线程(这也是唯一可以创建joinable线程的方式),对于joinable线程来说,除非有其他线程join它,那么即使线程运行结束,相关资源也不会被系统回收。而且,当应用程序退出时,detach线程会立马结束,而joinable线程必须被join才会退出。因此,joinable线程特别适合执行保存数据到磁盘这些关健任务。
除此之外,使用POSIX线程还需要有两点要注意:
1 Cocoa框架基于性能上的考虑,如果应用是单线程,是不会创建锁以及类似的用来线程同步的资源的,除非应用进入了多线程模式。使用NSThread创建线程的时候,会发通知表明应用已经进入了多线程模式,而是用POSIX线程的时候,不会有这个通知。因此使用POSIX线程时,都会首先创建使用NSThread创建一个什么也不做的线程出现,以此来告诉Cocoa框架,应用已经进入了多线程模式。
2 在应用里面,可以同时使用POSIX和Cocoa提供的锁,这些锁可以混用,Cocoa的锁其实也只是对POSIX锁的一种封装而已。但是Cocoa的锁只能使用Cocoa提供的接口操作,POSIX的锁也只能使用POSIX提供的接口操作,比如你不能使用POSIX的接口操作NSLock,反过来也一样。
Writing Your Thread Entry Routine
对于在OC里面创建线程来说,你在入口函数首先要做的,就是在入口函数一开始就创建自动释放池,然后在入口函数退出时释放自动释放池。
Threading Programming Guide:Thread Management的更多相关文章
- View Controller Programming Guide for iOS---(五)---Resource Management in View Controllers
Resource Management in View Controllers View controllers are an essential part of managing your app’ ...
- Structured Streaming编程 Programming Guide
Structured Streaming编程 Programming Guide Overview Quick Example Programming Model Basic Concepts Han ...
- 【IOS笔记】View Programming Guide for iOS -1
原文:View Programming Guide for iOS View and Window Architecture Views and windows present your applic ...
- [IoLanguage]Io Programming Guide[转]
Io Programming Guide Introduction Perspective Getting Started Downloading Installing Binaries Ru ...
- Concurrency Programming Guide 并发设计指引(二)
以下翻译是本人通过谷歌工具进行翻译,并进行修正后的结果,希望能对大家有所帮助.如果您发现翻译的不正确不合适的地方,希望您能够发表评论指正,谢谢.转载请注明出处. Concurrency and App ...
- View Programming Guide for iOS_读书笔记[正在更新……]
原文:View Programming Guide for iOS 1 Introduction 先熟悉一下基本概念. Window Windows do not have any visible c ...
- cocos2d Programming Guide
http://python.cocos2d.org/doc/programming_guide/index.html The cocos2d Programming Guide provides in ...
- View Controller Programming Guide for iOS---(二)---View Controller Basics
View Controller Basics Apps running on iOS–based devices have a limited amount of screen space for d ...
- Table View Programming Guide for iOS---(四)---Navigating a Data Hierarchy with Table Views
Navigating a Data Hierarchy with Table Views 导航数据表视图层次 A common use of table views—and one to which ...
- View Programming Guide for iOS ---- iOS 视图编程指南(五)---Animations
Animations Animations provide fluid visual transitions between different states of your user inter ...
随机推荐
- KingbaseES运维案例之---数据库启动“could not open shared memory segment”
案例说明: 在kylin系统下数据库启动出现"could not open shared memory segment xxxx"的故障,故障如下所示: 适用版本: Kingb ...
- 【已解决】idea编译器插入数据到数据库乱码以及jsp页面乱码的解决方法
1.jsp页面需要设置编码格式为utf-8 1 <%@ page contentType="text/html;charset=UTF-8" language="j ...
- OpenHarmony Docker移植实践
Docker简介 从操作系统诞生之日起,虚拟化技术就不断的演进与发展,结合目前云原生的发展态势,容器无疑是其中的重要一环. Docker是一个开源的软件项目,可以在Linux操作系统上提供一层额外的 ...
- 浅谈OpenHarmony LiteOS-A内核之基础硬件——中断控制器GIC400
一.前言 OpenAtom OpenHarmony(以下简称"OpenHarmony")采用多内核架构,支持Linux内核的标准系统.LiteOS-A的小型系统.LiteOS-M的 ...
- 【直播回顾】OpenHarmony知识赋能六期第一课—OpenHarmony智能家居项目介绍
6月16日晚上19点,知识赋能第六期第一节课 <OpenHarmony智能家居项目介绍> ,在OpenHarmony开发者成长计划社群内成功举行. 本次直播是"OpenHarmo ...
- vue-cli4,vue3打包后页面无内容
这个问题百度了一下,各种各样的的回答都有,试了好多种方法,终于解决这个问题 解决方法: 1.在项目根目录下,新建 vue.config.js, 在文件中输入: module.exports = { ...
- c# 历史版本特性
版本 .NET Framework版本 Visual Studio版本 发布日期 特性 C# 1.0 .NET Framework 1.0 Visual Studio .NET 2002 2002.1 ...
- 力扣8(java)-字符串转整数(atoi)(中等)
题目: 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数). 函数 myAtoi(string s) 的算法 ...
- 第3章 python 爬虫抓包与数据解析
第 3章 Python 爬虫抓包与数据解析 3.1 抓包进阶 目前,我们已经会使用 Chrome 浏览器自带的开发者工具来抓取访问网页的数据包,但是这种抓包方法有局限性,比如只能监听一个浏览器选项卡, ...
- SQL Server实战一:创建、分离、附加、删除、备份数据库
本文介绍基于Microsoft SQL Server软件,实现数据库创建.分离.附加.删除与备份的方法. 目录 1 交互式创建数据库 2 Transact-SQL指定参数创建数据库 3 交互式分离 ...