开发者文档之多线程编程指南学习笔记

原创 2015年11月18日 00:17:39



线程是单个应用中可以并发执行多个代码路径的多种技术之一。


多核让计算机有了同时执行多个任务的能力。


多现程的优势:

1.多个线程可以提高应用程序的感知响应。

2.多个线程可以提高应用车公孽杀在多核系统上的实时性能。



线程的状态:运行、就绪、阻塞。


run loop为线程检测一个或多个事件源。


Run Loops 可以让你使用最小的资源来创建长时间运行的线程。


线程编程的危害之一就是多个线程之间的资源争夺。常用锁、条件、原子操作和其他技术来同步资源的访问。


锁提供了只有一个线程可以执行代码的有效保护形式。



创建一个线程:

1.使用NSThread

使用detachNewThreadSelector:toTarget:withObject:l类方法来生成一个新线程。

2.创建一个新的NSThread对象,并调用它的start方法。


这两种方式创建的线程,在线程退出时,线程的资源由系统自动回收。


如果拥有一个NSThread对象,它的线程当前正在运行,可以给该线程发送消息的唯一方法是在你的应用程序的任何对象使用:

performSelector:onThread:withObject:waitUntilDone:方法。但是不能周期的循环的使用该方法来实现线程间的通信。




使用POSIX的多线程

POSIX可移植性操作系统接口


脱离线程(Datached thread):比较受欢迎,因为他们允许系统在线程完成的时候立即释放它的数据结构。



线程的中断,一般建议,让线程正常退出。不鼓励强制杀死一个线程,强制杀死一个线程,会阻止线程本身的清理工作。线程分配的内存可能造成泄漏,并且其他线程当前使用的资源可能没有被正确清理干净,之后造成潜在的问题。



第三章   Run Loops


Run Loops 是线程相关的基础框架的一部分。 一个run loop 就是一个时间处理的循环,用来不停地调度工作以及处理输入事件。

run loop 是让你的线程在有工作的时候工作,无工作的时候处于休眠。


run loop接收输入事件有两种不同的来源:输入源(input source)和定时源(timer source)。

输入源传递异步事件,通常消息来自于其他线程或程序。

定时源则传递同步时间,发生在特定时间或者重复的时间间隔。



第四章    线程同步


同步工具:

原子操作

内存屏障和Volatile(易挥发的,变化无常的)

锁:(锁类型:Mutex互斥锁、Recursive lock递归锁、Read-write lock读写锁、Distributed lock分布锁、Spin lock自旋锁、Double-checked lock双重检查锁)

大部分锁类型都合并了内存屏障来确保在进入临界区之前它前面的加载和存储指令都已经完成。

条件:条件是信号量的另外一种形式,它允许在条件为真的时候线程间互相发送信号。

条件和互斥锁的区别在于多个线程被允许同时访问一个条件。条件更多是允许不同线程根据一些指定的标准通过的守门人。

执行Selector例程



同步的成本和性能:

同步能保证代码正确执行,但有时候会牺牲部分性能。如发生锁的争夺,则会使线程进入阻塞。



死锁:任何时候线程视图同时获得多于一个锁,都有可能引发潜在的死锁。当两个不同的线程分别保持一个锁(而该锁是另外一个线程需要的)又视图获得另外线程的锁时就会发生死锁。结果是每个线程都会进入持久性阻塞状态,因为它永远不可能获得另外那个锁。


活锁:当两个线程竞争同一个资源的时候就可能发生活锁。

在发生活锁的情况里,一个线程放弃他的第一个锁并试图获得第二个锁,一旦它获得第二个锁,他返回并试图再次获得一个锁。线程就会被锁起来,因为它花费所有的额时间来释放一个锁,并试图获取其他锁,而不做实际的工作。


避免死锁和活锁的最好方法是同一个时间只拥有一个锁。如果你必须在同一时间获取多于一个锁,你应该确保其他线程没有做类似的事情。



线程安全总结:

不可变的对象一般是线程安全的。可变对象通常不是线程安全的。为了在多线程应用使用可变对象,应用必须适当的同步。





Hive编程指南学习笔记(1)

hive一次使用命令: $ hive -e "select * from mytable limit 1;" OK name1 1 name2 2 Time taken: 3.935 seconds ...
  • iAm333
  • iAm333
  • 2014年11月07日 19:15
  • 1831

《CUDA并行程序设计-GPU编程指南》读书笔记--(1)线程网格、线程块以及线程

线程网格、线程块以及线程
  • u011475134
  • u011475134
  • 2017年05月10日 20:05
  • 2027

Cocoa编程开发者手册

Cocoa编程开发者手册 介绍Cocoa: - Cocoa与Mac OS X - Cocoa 编程语言选择 - 使用苹果开发者工具 Cocoa框架: ...
  • weichuang_1
  • weichuang_1
  • 2015年10月03日 16:35
  • 500

Android 多线程处理之多线程用法大集合 第 3 页

第 3 页 ExecutorServie线程池 5.ExecutorServie线程池 通过Executors的静态方法来创建,一般有三种: 1.单线程 :Executors.new...
  • Buaaroid
  • Buaaroid
  • 2015年08月24日 16:12
  • 397

Android多线程API

一、Looper、Handler、MessageQueue、Message Looper:用于封装消息循环,,并且有一个消息队列(MessageQueue)。一个线程可以有一个Looper,主线程默认...
  • hello_yxc
  • hello_yxc
  • 2017年03月22日 20:55
  • 137

多线程编程指南(官方文档)一

多线程编程指南 简介 1. 关于多线程编程 多年以来,计算机的性能在很大程度上被单核处理器的速度所 限制。在当前技术下,单核处理器的速度已经到达某种极限,因此,芯片制造商们转而专注于多核设计,...
  • fanxiaochuan
  • fanxiaochuan
  • 2013年07月06日 22:19
  • 861

Android性能优化之多线程

本文主要介绍了AsyncTask, HandlerThread, IntentService与ThreadPool分别适合的场景以及各自的使用注意事项。 一,线程性能 在程序开发的实践当中,为了让程序...
  • qq_33336787
  • qq_33336787
  • 2016年08月05日 15:46
  • 211

Android 多线程下载断点续传demo

源代码下载地址:http://download.csdn.net/detail/caiwenfeng_for_23/7380821
  • caiwenfeng_for_23
  • caiwenfeng_for_23
  • 2014年05月21日 17:04
  • 3171

易编远航第一期-第五套大漠多线程…

[『外挂辅助』] 易编远航第一期-第五套大漠多线程中级进阶视频教程 使用同步器作为多线程中级教材,主要是对上一套初级教程做一个简单的总结, 并且对接下来脚本的线程处理,及监控线程起到一个较高的实际认...
  • zfycike
  • zfycike
  • 2017年05月08日 12:40
  • 727

Java之多线程学习笔记

1.理解程序,进程,线程的概念 程序可以理解为静态的代码 进程可以理解为执行中的程序 线程可以理解为进程的进一步细分,程序的一条执行路径 2.如何创建 java 程序的线程 方式一:继承于T...
  • Snow_Ice_Yang
  • Snow_Ice_Yang
  • 2017年03月20日 14:03
  • 116
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:开发者文档之多线程编程指南学习笔记
举报原因:
原因补充:

(最多只允许输入30个字)