线程和多线程(二)

概述

多线程的概念在各个操作系统上都会接触到,windows、Linux、mac os等等这些常用的操作系统,都支持多线程的概念。

当然ios中也不例外,但是线程的运行节点可能是我们平常不太注意的。

之前简单介绍了下单线程和多线程,下面再对单线程和多线程做下补充。

一、程序、进程、线程的区别

二、单线程

三、多线程

四、单线程和多线程的区别

五、多线程的作用

1、多线程的作用

相信有过开发经验的程序员都知道,当我们把代码写完后,程序是一行一行逐行执行代码的,当其中一行代码需要执行较长时间(例如select一个教复杂的语句或者较多的数据时),那么程序就会出现卡顿的现象,不会响应用户的操作。

因为开启程序后会默认开启一个主线程,即UI线程。当处于刚才那种情况时,比如一个windows程序,就会出现程序暂时无响应的提示,好像电脑卡主的感觉,这是非常不好的一种用户体验。

当我们要避免这种情况的时候,最好的方式就是多线程,开启一个新的线程,用来执行一个耗时的操作,执行完成后再让主线程来修改UI页面(如果需要的话)。

既多线程可以解决负载均衡问题,充分利用CPU资源,为了提高可CPU的使用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。

 

2.多线程的原理

 

同一时间,CPU只能处理1条线程,只有1条线程在工作(执行)
多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换)
如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象
思考:如果线程非常非常多,会发生什么情况?
CPU会在N多线程之间调度,CPU会累死,消耗大量的CPU资源
每条线程被调度执行的频次会降低(线程的执行效率降低)

 

3.多线程的优缺点

 

多线程的优点

能适当提高程序的执行效率

能适当提高资源利用率(CPU、内存利用率)

 

多线程的缺点

开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能

线程越多,CPU在调度线程上的开销就越大

程序设计更加复杂:比如线程之间的通信、多线程的数据共享

 

4.多线程在iOS开发中的应用

主线程:一个iOS程序运行后,默认会开启1条线程,称为“主线程”或“UI线程”

主线程的主要作用

显示刷新UI界面

处理UI事件(比如点击事件、滚动事件、拖拽事件等)

 

主线程的使用注意:别将比较耗时的操作放到主线程中。

耗时操作会卡住主线程,严重影响UI的流畅度,给用户一种“卡”的坏体验 

5、用到多线程的地方

在很多时候我们呢可能没有用到多线程,或者不清楚什么时候用多线程,那么在什么地方会用到多线程呢?

大多情况下,要用到多线程的主要是需要处理大量的IO操作时或处理的情况需要花大量的时间等等,比如:读写文 件、视频图像的采集、处理、显示、保存等。 

6、iOS有三种主要的实现多线程的方法

1、NSThread。2、NSOperation。3、GCD。 

 

7、多线程安全的解决方案

使用锁:锁是线程编程同步工具的基础。锁可以让你很容易保护代码中一大块区域以便你可以确保代码的正 确性。

1、使用POSIX互斥锁;

2、使用NSLock类;

3、使用@synchronized指令等。 

互斥锁的优缺点

优点:能有效防止因多线程抢夺资源造成的数据安全问题

缺点:需要消耗大量的CPU资源

 

互斥锁的使用前提:多条线程抢夺同一块资源 

相关专业术语:线程同步,多条线程按顺序地执行任务

互斥锁,就是使用了线程同步技术

 

1、创建NSThread的两种方式

 

原文地址:https://www.cnblogs.com/496668219long/p/4643179.html