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 ...
随机推荐
- 数据解析之re正则表达式
数据解析之re正则表达式 1. 正则基础 1.1 为什么使用正则 需求 判断一个字符串是否是手机号 解决 编写一个函数,给函数一个字符串,如果是手机号则返回True,否则返回False 代码 def ...
- CTFshow pwn49 wp
PWN49 用ida打开我们发现是静态编译的,所以先要通过libc库来打是不可能的了,程序里面有一个栈溢出点,找一下有没有system函数,发现并没有 那么我们找一下有没有mprotect函数如果有这 ...
- AtCoder Beginner Contest 240
前言 考场把前六题切了,但是 E 题和 F 题罚时了,所以也写一写. ABC240 E - Ranges on Tree 题目传送门 分析 \(r\) 的最大值就是叶子的个数,如果将叶子按顺序编号, ...
- #树状数组#洛谷 5677 [GZOI2017]配对统计
题目 分析 考虑处理出所有右端点的能够匹配的左端点,然后用树状数组离线查询 代码 #include <cstdio> #include <cctype> #include &l ...
- 一文弄懂java中的Queue家族
目录 简介 Queue接口 Queue的分类 BlockingQueue Deque TransferQueue 总结 java中Queue家族简介 简介 java中Collection集合有三大家族 ...
- 踩坑指南:入门OpenTenBase之部署篇
引言 OpenTenBase 企业级分布式HTAP开源数据库,具备高扩展性.商业数据库语法兼容.分布式HTAP引擎.多级容灾和多维度资源隔离等能力,成功应用在金融.医疗.航天等行业的核心业务系统. 这 ...
- 推荐几款Vue后台管理系统的框架,以便备用
推荐几款Vue后台管理系统的框架,以便备用 Vue.js 是一个目前比较流行的前端框架,在业界也算很有名气,今天这里为大家罗列一下基于Vue的后端管理的框架. 使用这些框架你会发现它包括了我们常用的路 ...
- spring cloud 学习笔记 基础工程的构建(一)
前言 学习一下spring cloud,只是过一遍微服务的一些现代化工具,微服务其实一直都存在,去公司的时候发现一个问题,即使有些项目没有用到现代这些什么docker.k8s,其实也是微服务,微服务一 ...
- 力扣350(java&python)-两个数组的交集 II(简单)
题目: 给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集.返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值).可以不 ...
- 力扣273(java)-整数转换英文表示(困难)
题目: 将非负整数 num 转换为其对应的英文表示. 示例 1: 输入:num = 123输出:"One Hundred Twenty Three"示例 2: 输入:num = 1 ...