线程,在网络或多用户环境下,一个server通常须要接收大量且不确定数量用户的并发请求,为每个请求都创建一个进程显然是行不通的。——不管是从系统资源开销方面或是响应用户请求的效率方面来看。因此,操作系统中线程的概念便被引进了。
线程,是进程的一部分。一个没有线程的进程能够被看作是单线程的。
线程有时又被称为轻权进程或轻量级进程,也是 CPU 调度的一个基本单位。
进程的运行过程是线状的,虽然中间会发生中断或暂停,但该进程所拥有的资源仅仅为该线状运行过程服务。一旦发生进程上下文切换,这些资源都是要被保护起来的。
这是进程宏观上的运行过程。
而进程又可有单线程进程与多线程进程两种。我们知道,进程有 一个进程控制块 PCB 。相关程序段 和 该程序段对其进行操作的数据结构集 这三部分,单线程进程的运行过程在宏观上是线性的。微观上也仅仅有单一的运行过程。而多线程进程在宏观上的运行过程同样为线性的,但微观上却能够有多个运行操作(线程),如不同代码片段以及相关的数据结构集。线程的改变仅仅代表了 CPU 运行过程的改变。而没有发生进程所拥有的资源变化。除了 CPU 之外,计算机内的软硬件资源的分配与线程无关,线程仅仅能共享它所属进程的资源。与进程控制表和 PCB 相似。每个线程也有自己的线程控制表 TCB ,而这个 TCB 中所保存的线程状态信息则要比 PCB 表少得多,这些信息主要是相关指针用堆栈(系统栈和用户栈),寄存器中的状态数据。进程拥有一个完整的虚拟地址空间,不依赖于线程而独立存在;反之,线程是进程的一部分。没有自己的地址空间。与进程内的其它线程一起共享分配给该进程的全部资源。
线程能够有效地提高系统的运行效率,但并非在全部计算机系统中都是适用的。如某些非常少做进程调度和切换的实时系统。使用线程的好处是有多个任务须要处理机处理时,减少处理机的切换时间;而且,线程的创建和结束所须要的系统开销也比进程的创建和结束要小得多。最适用使用线程的系统是多处理机系统和网络系统或分布式系统。
iOS有四种多线程编程的技术。各自是:NSThread。Cocoa NSOperation,GCD(全称:Grand Central Dispatch),pthread。
四种方式的优缺点介绍:
1)NSThread长处:NSThread 比其它两个轻量级。缺点:须要自己管理线程的生命周期,线程同步。线程同步对数据的加锁会有一定的系统开销。
2)Cocoa NSOperation长处:不须要关心线程管理, 数据同步的事情,能够把精力放在自己须要运行的操作上。Cocoa operation相关的类是NSOperation, NSOperationQueue.NSOperation是个抽象类,使用它必须用它的子类。能够实现它或者使用它定义好的两个子类: NSInvocationOperation和NSBlockOperation.创建NSOperation子类的对象,把对象加入到NSOperationQueue队列里运行。
3)GCD(全长处)Grand Central dispatch(GCD)是Apple开发的一个多核编程的解决方式。
在iOS4.0开始之后才干使用。GCD是一个替代NSThread, NSOperationQueue,NSInvocationOperation等技术的非常高效强大的技术。
4) pthread是一套通用的多线程API,适用于Linux\Windows\Unix,跨平台,可移植,使用C语言,生命周期须要程序猿管理,IOS开发中使用非常少。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-76692-6.html