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的更多相关文章

  1. 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’ ...

  2. Structured Streaming编程 Programming Guide

    Structured Streaming编程 Programming Guide Overview Quick Example Programming Model Basic Concepts Han ...

  3. 【IOS笔记】View Programming Guide for iOS -1

    原文:View Programming Guide for iOS View and Window Architecture Views and windows present your applic ...

  4. [IoLanguage]Io Programming Guide[转]

    Io Programming Guide     Introduction Perspective Getting Started Downloading Installing Binaries Ru ...

  5. Concurrency Programming Guide 并发设计指引(二)

    以下翻译是本人通过谷歌工具进行翻译,并进行修正后的结果,希望能对大家有所帮助.如果您发现翻译的不正确不合适的地方,希望您能够发表评论指正,谢谢.转载请注明出处. Concurrency and App ...

  6. View Programming Guide for iOS_读书笔记[正在更新……]

    原文:View Programming Guide for iOS 1 Introduction 先熟悉一下基本概念. Window Windows do not have any visible c ...

  7. cocos2d Programming Guide

    http://python.cocos2d.org/doc/programming_guide/index.html The cocos2d Programming Guide provides in ...

  8. 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 ...

  9. 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 ...

  10. View Programming Guide for iOS ---- iOS 视图编程指南(五)---Animations

      Animations Animations provide fluid visual transitions between different states of your user inter ...

随机推荐

  1. java实战:多属性排序

    多属性排序的核心点就是对Arrays.sort()和Collections.sort()方法的Comparator进行重写 Arrays.sort()的三种用法 1.1.Arrays.sort(int ...

  2. C 语言文件处理全攻略:创建、写入、追加操作解析

    C 语言中的文件处理 在 C 语言中,您可以通过声明类型为 FILE 的指针,并使用 fopen() 函数来创建.打开.读取和写入文件: FILE *fptr; fptr = fopen(filena ...

  3. VS2019 开发 MFC ACtivex (OCX)控件

    需求: js调用ocx方法,传递字符串到ocx控件中显示 操作步骤: 一.新建 ocx 项目 二.填写项目信息 三.完成项目创建 四.修改项目属性 打开  项目属性  ->  链接器  -> ...

  4. 鼠标移动出现雪花-js实现

    // 鼠标移动出现雪花.html <!DOCTYPE html> <html> <head> <title></title> <scr ...

  5. Centos环境部署SpringBoot项目

    centos JDK Jenkins maven tomcat git myslq nginx 7.9 11.0.19 2.418 3.8.1 9.0.78 2.34.4 5.7.26 1.24.0 ...

  6. 想学习eTS开发?教你开发一款IQ-EQ测试应用

    原文:https://mp.weixin.qq.com/s/eZgifjirAW58dFCa0W7kSQ,点击链接查看更多技术内容. 开发者Mack基于HarmonyOS的ArkUI框架开发的IQ- ...

  7. 在 macOS Big Sur 上安装 MySQL 8.x Compressed TAR Archive

    因个人能力有限,文章难免存在错误,望斧正,感谢. 版本: macOS 11.6 Intel版本 MySQL 8.0.26 Compressed TAR Archive 一.准备所需文件 前往 MySQ ...

  8. BI、OLAP、多维分析、CUBE 这几个词是什么关系?

    这些词我们在建设分析型应用时经常会听到,这几个词也经常被弄混,这里来梳理一下. BIBI 是 Business Intelligence(商业智能)的缩写,是指企业利用已有数据进行数据分析从而指导商业 ...

  9. gRPC入门学习之旅(七)

    gRPC入门学习之旅(一) gRPC入门学习之旅(二) gRPC入门学习之旅(三) gRPC入门学习之旅(四) gRPC入门学习之旅(五) gRPC入门学习之旅(六) 3.6.创建gRPC的桌面应用客 ...

  10. el-tree选中子级时默认选中父级(角色授权)

    问题1:选中子级时默认选中父级 <el-tree :data="menuData" show-checkbox default-expand-all node-key=&qu ...