基本概念
程序:有源代码生成的可执行应用。
进程:一个正在运行的程序可以看做是一个进程。进程拥有独立运行所需的全部资源。
线程:程序中独立运行的代码段。
*一个进程是由一个或多个线程组成。进程只负责资源的调度与分配,线程才是程序真正的执行单元,负责代码执行。
单线程特点
每个正在运行的程序(即进程),至少包含一个线程,这个线程叫做主线程。
主线程在程序启动时被创建,用于执行main函数。
只有一个线程的程序称为单线程程序。
主线程负责执行程序所有代码,这些代码只能顺序执行不能并发执行。
多线程
拥有多个线程的程序,称作多线程程序。
iOS允许用户自己自己开辟新的线程,相对于主线程来讲,这些线程称作子线程。
可以根据需要开辟若干子线程。
子线程和主线程都是独立的运行单元,各自的执行互不影响,因此能够并发执行。
单、多线程的区别
单线程程序:只有一个进程,代码顺序执行,容易出现代码阻塞。
多线程程序:有多个线程,线程之间独立运行,能够有效地避免代码阻塞,并提高代码的运行性能。
iOS中UI的添加和刷新都是在主线程中操作。
代码专区
//NSTread
//1.获取当前线程
NSTread *currentThread = [NSThread currentThread];
//2.获取主线程
NSThread *mainThread = [NSThread mainThread];
//3.[NSThread detachNewThreadSelector:SEL toTarget:(id) withObject:nil];
//NSObject
//1.自带的多线程实现
//2.[self performSelectorInBackground:@selector(dead) withObject:nil];
//NSOperation
//1.NSOperation *per = [[NSOperation alloc] init];
开始执行直接调用 [per start]; 换行释放[per release];
//2.两个子类 NSInvocationOperation ,NSBlockOperation
//NSOperationQueue
//1.可设置最大并发数 setMaxConcurrentOperationConunt;
//2.给队列里添加任务 addOperation addOperationWithBlock:^{};
//GCD
//创建一个同步线程队列(队列名)
dispatch_queue_t queue = dispath_queue_create("first",DISPATCH_QUEUE_SERIAL)
//异步执行同步线程队列
dispatch_async(queue,^{多线程代码});
//返回主线程
dispath_async(dispatch_get_main_queue(),^{代码(在主线程中运行)});
//并行队列(默认global_queue)
dispath_async(dispath_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{同步下载,在主线程运行})