iOS - 多线程 - 01(介绍, pthread)

    //进程:正在运行的一个应用程序, 进程之间独立

    //线程:线程是进程的基本执行单元,一个进程的所有任务都在线程中执行.一个进程要想执行任务,必须得有线程(至少有一个线程)

    //线程的串行:一个线程中的任务的执行时串行的, 如果在一个线程中执行多个任务,那么只能一个个的按顺序执行任务.(也就是在同一时间,一个线程只能执行一个任务A->B->C)

    //多个线程:一个进程中可以开启多条线程,每条线程可以并行(同时)执行不同的任务.

            //比如同时开启3调线程没别下载3个文件 (线程1-A,线程2-B,线程3-C)

            //线程的并行(提高程序执行的效率)

    //原理:同一时间CPU只能处理一条线程,只有一条线程在工作(执行),多线程并发执行,其实是CPU快速的在多条线程之间调度(切换),如果切换比较快,就造成了多线程的并发假象

    //如果线程非常多, CPU会累死,消耗大量CPU资源.每条线程被调度的频次会降低(3~5条)

    //优点:1,适当提高程序的执行效率;2,适当提高资源的利用率

    //缺点:1,开启线程需要占用一定的内存空间(默认情况下,主线程占用1M, 子线程占用512K)如果开启大量线程,会占用大量的内存空间,降低程序的性能;2,线程多的话CPU在调度线程上开销大;3,程序设计更复杂,线程之间的通信,数据共享方面,还有多线程的访问的安全问题

//主线程:一个程序运行后, 默认开启一条线程称为主线程(UI线程)

    //作用:显示\刷新UI界面\处理事件(点击事件,滚动等)

    //使用注意:不要讲耗时的操作放到主线程(卡顿)

    

    //NSThread *current = [NSThread currentThread];//获得当前的线程

    

    //iOS中多线程实现方案

    //1:pthread,通用的多线程(C语言),使用Unix\Linux\Windows,跨平台\可移植,难度大.生命周期需要自己管理(几乎不用)

    //2:NSThread,OC,面向对象,简单易用,可直接操作线程对象,自己管理生命周期(偶尔使用)

    //3:GCD:C语言,推荐使用(替代NSThread),充分利用设备多核,自动管理生命周期(经常使用)

    //4:NSOperation:OC语言,基于GCD,面向对象,比GCD多了一些更简单使用的功能,自动管理生命周期(经常使用)

    

    //1:使用pthread 需要引入头文件 #import <pthread.h>(了解)

//代码如下:

void *run(void *data){

    //将耗时操作在这执行

    NSThread *current = [NSThread currentThread];

    NSLog(@"run -- %@", current);

    return NULL;

}

- (IBAction)buttonClick:(UIButton *)sender {

    NSThread *current = [NSThread currentThread];

    NSLog(@"buttonClick:%@", current);

    pthread_t threadID; //线程的ID,需要传进去这个属性的地址

    //void *(*)(void *)通过这个来告诉他线程开启的时候执行什么方法

    pthread_create(&threadID, NULL, run, NULL);

}

 

posted @ 2016-01-26 13:04  灰狼哥  阅读(129)  评论(0编辑  收藏  举报