NSThread与多线程操作

本文介绍了多线程的基本原理及线程状态,并详细解释了NSThread与底层C语言POSIX框架的关系,同时对比了NSThread、pthread、GCD和NSOperation的特点。

一、概述

首先,我们先假设大家都对线程有初步的了解。那么我们都知道NSThread底层其实是调用的C语言中POISIX(可移植操作系统接口)框架下的pthread来实现线程控制的。

1.多线程基本原理

线程都是CPU来调度的,而(单核中)CPU同一时间是只能对一条线程进行操作。而我们所看到的多个线程同时运行其实是一种假象。真实的情况是CPU及其快速的切换多条线程,造成了我们看到多线程“同步”执行的假象。

2.NSThread 和 pthread,GCD 和 NSOperation

NSThread是对pthread的高度封装,使用了更加面向对象,更加简单易用的方式,使我们用起来更加的方便。
而我们需要注意一点,就是在OC开发中,只有NSThread和pthread是真正的多线程操作。GCD 和 NSOperation并不是真正的线程操作(不是真正的线程操作,但是属于多线程技术,是不是很拗口)。NSOperation是基于GCD的封装,比GCD更加简单实用。而GCD的底层是充分利用设备的多核技术,旨在替换NSThread。(GCD和NSOperation将在下一篇文章中充分讲解,这里只做简单了解)

3.线程的状态

我认为线程的状态有这么五种情况:新建状态,就绪状态,运行状态,阻塞状态,死亡状态(这里可能会有歧义,我将其他的多种状态也进行了合并,如等待状态、锁池状态等)。他们的关系如下图所示:

而我们常说的加锁方式其实是将多条线程以串行的方式来执行。(这里补充,就是单条线程中,所有的调用都是以串行的方式执行的。就像我们常遇到的这种情况:点击屏幕好几个位置没反应,然后过了一段时间各种界面就开始跳了。其根源就是线程在执行耗时操作,我们的点击操作被排到了后面执行)。如图:

这是我在掘金发的第一篇文章。由于最近比较忙,所以目前只写了概述,还有用法和注意事项没有写,本文内容还会更新,敬请大家期待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值