线程 跟 进程

2016-07-30  本文已影响12人  coder_hong

进程

屏幕快照 2016-07-30 下午4.50.09.png

线程跟进程的联系

如果我们想打开QQ音乐听歌,那么首先由打开QQApp,这时候创建一个进程在内存中,当然这样播放音乐的任务是不能够被执行的,这时候就需要创建线程去执行任务,也就是说任务是在线程中执行的,一个进程可以开启多条线程去执行任务

Snip20160730_2.png

线程的串行

-一条线程执行任务的方式是串行的 换句话说 一个进程想要执行多个任务,就只能按顺序执行多个任务,在同一个时间只能执行一个任务

Snip20160730_3.png

进程和线程的比较

  • 线程CPU调用(执行任务的最小单位)最小单位

多线程

概念

Snip20160730_4.png

多线程原理

注意:在实际开发中一般开3~5条,并不是越多越好

Snip20160730_5.png

多线程在iOS开发中的应用

主线程

一个iOS程序执行,默认会开启一条线程,称之为主线程UI线程

- 注意
- 耗时的操作放在子线程(后台线程)中执行 如果放在主线程会造成UI界面卡顿现象

iOS中多线程的实现方案

屏幕快照 2016-07-30 下午5.44.27.png

Thread

// 第一种方式
    NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(thread1) object:nil];
    // 优先级代码CPU执行的机会多一些
    thread.threadPriority = 0.1;
    thread.name = @"name";
    
    // 线程执行
    [thread start];
    
    // 第二种方式
    /**
     *  // 分离出一条线程 不需要手动执行 没有返回值
     *
     *  @param SEL withObject 可以传值
     *
     *  @return <#return value description#>
     */
    [NSThread detachNewThreadSelector:<#(nonnull SEL)#> toTarget:<#(nonnull id)#> withObject:<#(nullable id)#>];
    
    // 第三种方式
    // 开启一条后台线程 NSObject (NSThreadPerformAdditions)分类方法
    [self performSelectorInBackground:<#(nonnull SEL)#> withObject:<#(nullable id)#>];

线程的生命周期(状态)

Snip20160730_6.png

注意:线程死亡了是不可以在调用start方法运行的

Snip20160730_7.png

注意:

线程同步
 /**
     *  toke 锁对象 必须唯一 对象 字符床也可以 一般传递self
     */
    @synchronized (self) {
        // 加锁的代码
    }
Snip20160730_8.png

GCD

Snip20160730_9.png
上一篇 下一篇

猜你喜欢

热点阅读