美文网首页
对于多线程的一些理解

对于多线程的一些理解

作者: 小吖朱 | 来源:发表于2017-02-05 10:04 被阅读0次

1.PThread : 是一个C语言的一个API接口,由于使用难度较大,较为底层。我们在平常开发的时候不经常使用!
2.NSThread: 是三种方法里面相对轻量级的,但需要管理线程的生命周期、同步、加锁问题,这会导致一定的性能开销
3.NSOperation: 是基于OC实现的,NSOperation以面向对象的方式封装了需要执行的操作,不必关心线程管理、同步等问题。NSOperation是一个抽象基类,iOS提供了两种默认实现:NSInvocationOperation和NSBlockOperation,当然也可以自定义NSOperation
4.GCD:提供了一些新特性、运行库来支持多核并行编程,它的关注点更高:如何在多个cpu上提升效率

下面主要介绍一些NSThread:

首先NSThread初始化方法:(动态方法)
``
1 - (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument;

``
参数解析:
selector :线程执行的方法,这个selector最多只能接收一个参数

target :selector消息发送的对象

argument : 传给selector的唯一参数,也可以是nil
2初始化方法(静态方法)
2 + (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument;
3 [NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil]; // 调用完毕后,会马上创建并开启新线程

  1. 隐式创建线程的方法
    ``
    4 [self performSelectorInBackground:@selector(run) withObject:nil];

``

获取当前线程
5 NSThread *current = [NSThread currentThread];

获取主线程
6 NSThread *main = [NSThread mainThread];

暂停线程
// 暂停2s [NSThread sleepForTimeInterval:2]; // 或者 NSDate *date = [NSDate dateWithTimeInterval:2 sinceDate:[NSDate date]]; [NSThread sleepUntilDate:date];

线程间的通信

  1. 在指定线程上执行操作
    [self performSelector:@selector(run) onThread:thread withObject:nil waitUntilDone:YES];
  2. 在主线程上进行操作
    [self performSelectorOnMainThread:@selector(run) withObject:nil waitUntilDone:YES];
  3. 在当前线程执行操作
    7 [self performSelector:@selector(run) withObject:nil];

优缺点
1.优点:NSThread比其他两种多线程方案较轻量级,更直观地控制线程对象
2.缺点:需要自己管理线程的生命周期,线程同步。线程同步对数据的加锁会有一定的系统开销

补充一点就是:NSThread有哪几种状态,和转换的逻辑

新建->就绪-> cup调度当前任务->运行->阻塞->死亡->CUP调度其他任务->就绪
主线程的一些概念:
默认启动的线程,也叫作UI线程,用来显示和刷新UI界面,和处理一些UI事件的。 需要注意的是:不要把耗时操作放到主线程上去做!UI操作必须在主线程中执行 !!!!

说一说如何解决多条线程访问同一块资源造成的线程安全的问题,以及一些注意点!

加同步(互斥)锁 @synchronized OC中的同步锁:(锁对象) + {要锁住的代码} 锁对象:要求是全局唯一的属性 注意点: 要注意加锁的位置 加锁需要耗费性能,因此需要注意加锁的条件(多线程访问同一块资源) 专业术语:线程同步

原子和非原子属性的区别

atomic:原子属性,会为setter方法默认加锁,线程是安全的,但是会消耗大量资源! noatomic:非原子属性,不会为setter方法加锁。非线程安全,适合内存小的移动设备。

相关文章

  • 对于多线程的一些理解

    1.PThread : 是一个C语言的一个API接口,由于使用难度较大,较为底层。我们在平常开发的时候不经常使用!...

  • 对于多线程的一些理解——GCD

    GCD----提供了一些新特性、运行库来支持多核并行编程,它的关注点更高:如何在多个cpu上提升效率 GCD 全称...

  • 谈谈对于多线程的理解

    针对这个问题可以从以下几个点来说。 多线程用来解决什么问题 java怎么实现多线程 使用多线程会带来哪些问题 怎么...

  • iOS多线程笔记

    由于最近重新学习iOS多线程(GCD部分),对于多线程又有了一些新的理解,所以写下这篇文章作为记录。 1.异步方法...

  • Java 多线程 相关概念

    前言 本篇文章介绍一些多线程的相关的深入概念。理解后对于线程的安全性会有更深的理解。 先说一个格言,摘自Java核...

  • 两个例子帮你理解多线程与队列

    看了很多多线程与队列的概念,感觉对于一般开发者来说不是很容易理解,举两个网上比较好的栗子,如果理解了相信对于多线程...

  • 2018.05.13 杂谈

    《Java 并发编程实战》终于看完了,对于多线程有了一定的理解。多线程属于进阶技术。互联网行业充满了多线程和算...

  • Python “多线程”及其适用范围和缺点

    Python多线程的一些理解: 1.多线程采用的是分时复用技术,即不存在真正的多线程,cpu做的事是快速地切换线程...

  • 理解 python 中多线程

    虽然python中由于GIL的机制致使多线程不能利用机器多核的特性,但是多线程对于我们理解并发模型以及底层操作非常...

  • 对于需求的一些理解

    最近关注抖音比较多,回想起之前面试中被问及:抖音该如何避免昙花一现的火爆命运? 没有很好的回答,今天看了一些文章以...

网友评论

      本文标题:对于多线程的一些理解

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