现在的位置: 首页 > 综合 > 正文

Mac OS线程开发包介绍

2013年09月27日 ⁄ 综合 ⁄ 共 2264字 ⁄ 字号 评论关闭

Mac OS线程开发包介绍

 

Mac OS X提供了到几套API用于创建程序级别的线程。从行为上来看,这些API创建的线程的本质是一样的。

 

你可以根据你的程序(Carbon, Cocoa, Darwin)选择一套API函数, 同时也要考虑它的性能和复杂度。

 

举个例子,Cocoa线程使用比较简单,但是它比POSIX线程少了一些弹性和性能。

 

在接下来的文章我将给你介绍这些不同的线程API,比较每种实现的优点和缺点。所有的线程(除了注明)都是根据当前运行的状态和优先级抢先式运行。

 

注意:在下面的文章中,线程的介绍从实现的级别由低到高的方式介绍,展示了每层上线程的实现是如何建立在上一层的技术之上。这个顺序并不能作为你应用程序使用的建议指导。你选择必须是根据当前的具体功能和性能要求作出分析。

 

分类:

 

Mach
Threads
 

POSIX
Threads
 

Cocoa
Threads
 

Carbon
Multiprocessing Services
 

Carbon
Thread Manager

 

 

Mach Threads

 

 

 

Mach threads (有时候指内核线程)提供了系统级别的线程的实现方法。所有其它的线程函数都是建立在Mach线程之上。应用程序开发者很少需要直接使用Mach线程。Mach线程一般用于内核级别程序的开发,像内核的扩展程序。应用程序如果需要调用的线程的话,应该是使用POSIX或其它更高层次的API

 

注意: 虽然I/O
Kit
运行在内核级别,但是它们没有直接使用Mach线程,相反,I/O Kit 定义自己的类和函数来实现线程。如想了解更多的信息,请参照Device
Drivers (Kernel/IOKit) Reference
.

 

POSIX Threads

 

 

 

一个POSIX 线程(通常指一个“pthread”)是一个基于Mach线程封装的较量级的API,它提供了用户级别的处理。POSIX线程是所有应用程序级别线程的基础,包括Cocoa线程,
Carbon
线程, POSIX线程是基于C语言的API函数,提供了全面的创建控制和信息读取的功能。全面也意味着你的程序必须比其它线程API需要更多的设置和管理。(举个例子,不像其它的线程包,一个POSIX线程是不会自动同程序的主线程发生联系。) 因为程序对于线程的行为需要更多的控制,可是,POSIX 线程比其它API提供了更高的性能。

 

另一个好处就是POSIX 线程API已经在多个平台上实现,因此,你用POSIX 线程实现的代码能够运行在大多数的UnixWindows操作系统。

 

如想了解更多的信息,请参照pthread主页

 

Cocoa Threads

 

 

 

Cocoa threads (NSThread类实现)提供了一个创建和管理线程的高级类。NSThread内部是采用POSIX线程来实现,但是NSThread也提供了更多自动管理POSIX线程的数据和行为的能力。它同时也会派发Cocoa通知消息给应用程序,通知应用程序当前的线程状态。

 

这个NSThread类应该在Cocoa应用程序或其它使用Foundation
framework
的程序优先使用。NSThread对象的性能非常好,虽然一些额外的开销使得它比POSIX线程慢。但在大部分的情况下,这些开销是可以忽略不计的。

 

更多关于创建Cocoa线程和使用NSThread类,请参照“Creating
Threads in Cocoa”

 

Carbon Multiprocessing Services

 

 

 

Carbon 应用程序中,Carbon Multiprocessing
Services 
是作为抢先式线程的管理API。这个模型是建立在Mac OS 9MP
Task API
之上,创建MP Task API只是 Carbon线程管理的折中模型。使用Multiprocessing
Services API
,一个应用程序可以在多处理机器上运行抢先式的线程,同时具有并行运行能力。

 

对于Carbon应用程序,Multiprocessing
Services
是创建线程的首选。这些API创建抢先式线程与POSIX线程和NSThread类是差不多的。而且,这个API也提供了一些更强的功能,如线程的同步,通知,定时,远程调用,异常处理,semaphores和临界标记。

 

更多关于使用Multiprocessing Services API信息,请参照Multiprocessing
Services Programming Guide
 Multiprocessing
Services Reference

 

Carbon Thread Manager

 

 

 

Carbon Thread Manager是一个历史遗留的API,主要作用是为了Carbon应用程序管理一系列辅助线程。不像抢先式线程,这里的每个线程的运行依赖与其它线程,指定的时间内只有一个应用程序的辅助线程可以在运行。线程由一个叫round-robin
manner
选择,当它们收到内核的通知运行的时候,你可以把这些辅助线程看成是一个组。收到内核通知的时候这个组中只能有一个被激活的线程可以运行,其它线程进入休眠状态一直要等到运行线程进入到休眠。

 

注意: 我们不建议现在还用Carbon线程管理来进行线程开发。这些API只要为了那些把他们的应用程序转到Mac
OS X
,同时那些代码还需要辅助线程。假如你现在正在写一个新的Carbon应用程序,必须要用POSIX线程或Multiprocessing
Services API
来替换。

【上篇】
【下篇】

抱歉!评论已关闭.