美文网首页
多线程和网络

多线程和网络

作者: YinLei | 来源:发表于2017-06-01 13:37 被阅读0次

    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.

    相关文章

      网友评论

          本文标题:多线程和网络

          本文链接:https://www.haomeiwen.com/subject/sytefxtx.html