iOS多线程01-介绍

推荐文章

iOS多线程02-NSThread实践

iOS多线程03-GCD实践

iOS多线程04-NSOperation实践

在学习多线程之前,我们需要先了解几个概念:

多线程是什么?

多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术,在单个程序中同时运行多个线程完成不同的工作,称为多线程,它是有效提升程序运行效率的方式之一。

线程和进程的区别?

进程:是指在系统中正在运行的一个应用程序。每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内。

线程:线程是进程的基本执行单元,一个进程的所有任务都在线程中执行。1个进程要想执行任务,必须得有线程,例如默认就是主线程。

1.进程包含线程,进程是CPU调度和分配资源的单位

2.线程是CPU调用的最小单位

3.一个程序可以对应多个进程,一个进程中可以有多个线程,但至少要有一个线程

4.同一个进程内的线程共享进程的资源

多线程有什么用?

1.充分使用CPU以及资源

2.提升应用程序性能以及用户体验

什么是串行、什么是并行?

串行:按顺序执行,即仅当一个程序执行完毕,下一个程序才能开始执行。

并行:程序同时执行。

在 iOS 中实现多线程目前有 4 种方法:

Pthreads

NSThread

GCD

NSOperation & NSOperationQueue

Pthreads

简单地说,这是一套在很多操作系统上都通用的多线程API,所以移植性很强(然并卵),当然在 iOS 中也是可以的。不过这是基于 c语言 的框架,使用起来这酸爽!

你需要手动处理线程的各个状态的转换即管理生命周期

pthread_tthread;

//创建一个线程并自动执行

pthread_create(&thread, NULL, start, NULL);

void* start(void* data) {

NSLog(@"%@", [NSThread currentThread]);

return NULL;

}

NSThread

NSThread是基于线程使用,轻量级的多线程编程方法(相对GCD和NSOperation),一个NSThread对象代表一个线程,需要手动管理线程的生命周期(开始、释放),处理线程同步等问题。

这套方案是经过苹果封装后的,并且完全面向对象的。所以你可以直接操控线程对象,非常直观和方便。但是,它的生命周期还是需要我们手动管理

GCD

它是苹果为多核的并行运算提出的解决方案,所以会自动合理地利用更多的CPU内核(比如双核、四核),最重要的是它会自动管理线程的生命周期(创建线程、调度任务、销毁线程),完全不需要我们管理,我们只需要告诉干什么就行。同时它使用的也是 c语言,不过由于使用了 Block(Swift里叫做闭包),使得使用起来更加方便,而且灵活。所以基本上大家都使用 GCD 这套方案。

NSOperation和NSOperationQueue

NSOperation 是苹果公司对 GCD 的封装,完全面向对象,所以使用起来更好理解。 大家可以看到 NSOperation 和 NSOperationQueue 分别对应 GCD 的 任务 和 队列 。操作步骤也很好理解:

1.将要执行的任务封装到一个 NSOperation 对象中。

2.将此任务添加到一个 NSOperationQueue 对象中。

线程同步

线程和其他线程可能会共享一些资源,当多个线程同时读写同一份共享资源的时候,可能会引起冲突。线程同步是指是指在一定的时间内只允许某一个线程访问某个资源。

你可能感兴趣的:(iOS多线程01-介绍)