多线程和网络

iOS中多线程的实现方案

pthread

a.特点:

1)一套通用的多线程API

2)适用于Unix\Linux\Windows等系统

3)跨平台\可移植

4)使用难度大

b.使用语言:c语言

c.使用频率:几乎不用

d.线程生命周期:由程序员进行管理

NSThread

a.特点:

1)使用更加面向对象

2)简单易用,可直接操作线程对象

b.使用语言:OC语言

c.使用频率:偶尔使用

d.线程生命周期:由程序员进行管理

GCD

a.特点:

1)旨在替代NSThread等线程技术

2)充分利用设备的多核(自动)

b.使用语言:C语言

c.使用频率:经常使用

d.线程生命周期:自动管理

NSOperation

a.特点:

1)基于GCD(底层是GCD)

2)比GCD多了一些更简单实用的功能

3)使用更加面向对象

b.使用语言:OC语言

c.使用频率:经常使用

d.线程生命周期:自动管理

GCD

(1)GCD基础知识

1.队列(用来存放任务)和任务(执行什么操作)

队列分三种:1.主队列the main queue(主线程就在这个队列);2.全局并发队列;3.自定义队列(dispatch_queue_create)

2.同步函数(按顺序执行)和异步函数(dispatch_async同时执行多个任务);

同步:只能在当前线程中执行任务,不具备开启新线程的能力;

异步:可以在新的的线程里执行任务,具备开启新线程的能力;

(2)GCD使用步骤

1.定制任务

2.将任务添加到队列中

GCD会自动将队列中任务取出,放到对应的线程中执行;任务取出遵循FIFO原则:先进先出,后进后出;

1>.创建队列

创建并发队列

1.dispatch_queue_t queue = dispatch_queue_create(@"队列名称",DISPATCH_QUEUE_CONCURRENT);

2.全局并发队列dispatch_get_global_queue(0,0);

创建串行队列

1.dispatch_queue_t queue = dispatch_queue_create(@"队列名",NULL);

2.主队列dispatch_queue_t queue = dispatch_get_main_queue();

注意点

异步+并行 = 会开启新的线程;

异步+串行 = 会开启新的线程,但只会创建一条新的线程,所有的任务都在这个新线程执行;

同步+并行 = 不会开启新的线程;

同步+串行 = 不会创建新的线程;

异步+主队列 = 不会开启新的线程(只要是主队列,永远都在主线程中执行);

同步+主队列 = 需要记住:同步函数不能搭配主队列使用(例外:如果同步函数是在异步函数中调用的,那么没问题)

异步函数,会先执行完所有代码,再在子线程中执行任务(block);同步函数,只要代码执行到同步函数那行,就会立即执行任务(block),只有任务执行完才会继续往后执行;

GCD其他函数

1.栅栏函数(控制任务的执行顺序)

dispatch——barrier_async(queue,^{

nslog(@"");});

栅栏函数:只有在和使用create函数自己的创建的并发队列一起使用时才有效,控制队列中任务的执行顺序,前面所有任务执行完毕后才执行栅栏函数,自己执行完毕后再执行后面任务,

2.

你可能感兴趣的:(多线程和网络)