首先我们先搞清两个概念:进程、线程
进程:进程是指在系统中正在运行的一个应用程序(同时开启qq和xcode,系统就会启动两个进程)。每个进程之间都是互相独立的,每个进程均运行在其专用的且受保护的内存空间内。
线程:一个进程要想执行任务,必须有线程(每个进程至少有一条线程,即主线程)。线程是进程的基本执行单位,进程的执行任务都在线程中执行。 线程是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.
线程中任务的执行是串行的,如果要在1个线程中执行多个任务,那么只能一个一个地按顺序执行这些任务。也就是说,在同一时间内,1个线程只能执行1个任务。
而我们在使用中不可能让多个任务在一个线程中依次去执行,因而就引入了多线程。
多线程:在一个进程中开启多个线程,每条线程可以并发(同时)执行不同的任务。
多线程的原理:同一时间,CPU只能处理一条线程,只有一条线程在工作(执行)。多线程并发(同时)执行,其实是CPU快速的在多条线程之间调度(切换),如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象
多线程优点:
(1)能适当提高程序的执行效率
(2)能适当提高资源利用率(CPU,内存利用率)
多线程缺点:
(1)开启线程需哟啊占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能
(2)线程越多,CPU在调度线程上的开销就越大
(3)程序设计更加复杂:比如线程之间的通信,多线程的数据共享
NSThread
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
[thread start]; //创建线程 在启动
[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];//创建线程后直接启动
[self performSelectorInBackground:@selector(run) withObject:nil];//隐式创建了线程 并启动
线程的主要方法
// 获得主线程
+ (NSThread *)mainThread;
// 判断是否为主线程(对象方法)
- (BOOL)isMainThread;
// 判断是否为主线程(类方法)
+ (BOOL)isMainThread;
// 获得当前线程
NSThread *current = [NSThread currentThread];
// 线程的名字——setter方法
- (void)setName:(NSString *)n;
// 线程的名字——getter方法
- (NSString *)name;
//线程启动
- (void)start;
//阻塞线程 这是类方法,在那个线程中调用,就阻塞那个线程
+ (void)sleepUntilDate:(NSDate *)date;
+ (void)sleepForTimeInterval:(NSTimeInterval)ti;
//结束线程 这是类方法,在那个线程中调用,就结束那个线程
+ (void)exit;
网友评论