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 ...
随机推荐
- 开源鸿蒙(OpenHarmonyOS)代码下载及编译
开源鸿蒙的代码仓在码云上,可以通过以下命令下载源码并编译 本机安装虚拟机 如本地已经安装可以忽略此步 安装指导:https://thoughts.teambition.com/share/614c49 ...
- HUAWEI DevEco Testing注入攻击测试:以攻为守,守护OpenHarmony终端安全
OpenAtom OpenHarmony(以下简称"OpenHarmony")作为面向全场景的开源分布式操作系统,可广泛应用于智能家居物联网终端.智能穿戴.智慧大屏.汽车智能座舱. ...
- Numpy结构化数组
Numpy结构化数组 Numpy的结构化数组和记录数组为复合的.异构的的数据提供了非常有效的存储. 结构化数组 In [1]: import numpy as np In [2]: name = [' ...
- VMware下CentOS7.6安装openGauss
VMware 下 CentOS7.6(7.9)安装 openGauss centos 安装 这里我使用的是 vmware workstation Pro 15 虽然官网了解了一下 openGauss ...
- Mybatis实现增删改查
1.CRUD 1.1namespace namespace中的包名必须和Dao/mapper接口包名一致 1.2select 选择,查询语句 id:就是对应的namespace中的方法名 resul ...
- Keycloak中授权的实现
在Keycloak中实现授权,首先需要了解与授权相关的一些概念.授权,简单地说就是某个(些)用户或者某个(些)用户组(Policy),是否具有对某个资源(Resource)具有某种操作(Scope)的 ...
- sql 语句系列(列举系列)[八百章之第八章]
前言 这一张就是就是查询自己设计数据库的结构,对于接收一个老的项目相当重要. 列举模式中的表 查询所以表 select table_name from INFORMATION_SCHEMA.TABLE ...
- 实训篇-Css-跳动的红心
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 图片验证码识别,标签中onehot编码对应多个1怎么做?
一张验证码图片直接做整体识别 也就是图片的最后输出节点有4*26=104个,经过一个softmax,使用交叉熵损失,与真实值4*26=104个标签做计算,然后反向传播 104个onehot编码真实值当 ...
- 力扣400(java)-第N位数字(中等)
题目: 给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字. 示例 1: 输入:n = 3输出: ...