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

原创 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例程



同步的成本和性能:

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



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


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

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


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



线程安全总结:

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





相关文章推荐

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

http://www.cocoachina.com/bbs/read.php?tid-53287-keyword-%B6%E0%CF%DF%B3%CC.html 多线程编程指南 简介 ...

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

线程设计建议 以下内容为多线程设计的指导,可以帮助你正确实现多线程代码。其中还包涵了一些提高线程性能的建议。和其他建议中提到的一样,在修改代码之前,修改代码时和修改后收集相关性能报表。 避...

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

多线程编程中的一个大麻烦是线程间的资源争夺。如果多个线程同时修改一份资源,问题就来了。减少问题的方法之一就是减少共享资源,保 证每个线程都有自己的一份资源可以使用。当然,管理完全独立的资源是不可能的,...

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

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

多线程编程指南读书笔记——Run Loop

Runloop 一个 run loop 是用来在线程上管理事件异步到达的基础设施。一个 run loop 为 线程监测一个或多个事件源。当事件到达的时候,系统唤醒线程并调度事件到 run loop,...
  • vistadk
  • vistadk
  • 2016年08月26日 13:34
  • 377

多线程编程指南读书笔记——线程同步

应用程序里面多个线程的存在引发了多个执行线程安全访问资源的潜在问题。两 个线程同时修改同一资源有可能以意想不到的方式互相干扰。 但涉及到线程安全时,一个好的设计是最好的保护。避免共享资源,并尽量减...
  • vistadk
  • vistadk
  • 2016年08月26日 14:03
  • 382

Posix多线程编程学习笔记

  • 2011年09月01日 09:42
  • 396KB
  • 下载

Posix多线程编程学习笔记

  • 2012年08月17日 14:06
  • 627KB
  • 下载

Zookeeper 编程指南官网文档学习笔记

Zookeeper 编程指南官网文档学习笔记此文是link zk program guide的阅读笔记。 由于对原文中出现的watches还没有很好的理解,在翻译时结合了上下文和自己的理解有时翻译成...

iOS开发多线程编程指南

  • 2013年06月14日 08:35
  • 1.04MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:开发者文档之多线程编程指南学习笔记
举报原因:
原因补充:

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