美文网首页
多线程(一)

多线程(一)

作者: Garruk | 来源:发表于2016-12-10 00:49 被阅读0次

    一.线程和进程

    进程::系统中正在运行的一个程序,每个程序独立运行在自己特定的受保护的内存空间内。

    从活动监视器上可以很直观的看到正在运行的进程名称,和占得CPU百分比。

    线程:一个进程想要执行任务,必须有线程,每一个进程最少有一条线程。线程是进程的基本执行单元,一个进程的所有任务都在线程中执行。

    可以看出有3个线程

    二.线程的串行和并行

    串行:在一个线程中执行多个任务,会按照顺序一个一个去执行。在同一时间内,只会执行一个任务。

    并行:在一个线程执行多个任务时,会同时执行多个不同的任务。

    多线程的原理:同一时间,CPU只能处理一条线程,只有一条线程在执行。多线程执行,是CPU快速的在多线程之间调度。如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象。

    三.多线程的优缺点

    优点:能够适当提高程序的执行效率,能适当的提高资源利用率(CPU,内存利用率)

    缺点:开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果大量开启线程,会占用大量内存空间,降低程序的性能线程越多,CPU在调度线程的开销就越大.程序设计会更加复杂,比如线程之间的通讯,多线程的数据共享。

    四:多线程开发中的运用

    在程序运行后会默认开启一条线程,称为主线程或UI线程,主要负责UI的刷新,处理UI事件.

    而在子线程负责数据的加载处理。

    主线程使用注意:耗时操作别放到主线程中,耗时操作会严重影响UI的流畅度,给用户一种“卡”的体验.

    五.代码示例:

    我们在storyboard中拖入开关控件,或者滑动条控件.

    @implementation ViewController

    - (void)viewDidLoad {

    [super viewDidLoad];

    }

    - (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event{

    [self performSelectorInBackground:@selector(longOperation) withObject:nil];

    }

    - (void)longOperation{

    NSLog(@"start");

    for (int i = 0; i < 1000000; ++i) {

    NSLog(@"%d",i);

    }

    NSLog(@"end");

    }

    如果在主线程中调用longOperation方法,由于在方法中我们打印i的值.这个操作是耗时操作.会大量消耗CPU性能.当运行程序,我们点击storyboard中的控件时,会发现控件没有进行响应,给用户“卡”的体验.而当我们开启子线程,将longOperation放入子线程中,再点击控件时,控件进行响应动作.

    相关文章

      网友评论

          本文标题:多线程(一)

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