1.概念:

多线程(multithreading)到底是什么呢,它是指在软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件的支持,而能够在同一时间执行多个线程,进而提升整体处理性能。在一个程序中,这些独立运行的程序片段,叫做线程(thread)。利用它编程的概念就叫做多线程处理。

2.多线程的原理:

对于单核的cpu而言,同一时间,CPU实际只能处理一个线程,也就是说,在某一时刻,实际只有一个线程在执行。所以对于在单核的CPU,执行多线程。实际上是在不同的线程之间来回切换。造成多个线程同时执行的现象。如果同时启动的线程非常多的话,就会对CPU资源浪费。

而对于多核的CPU而言,才是真正的在某一个时刻同时执行。比如双核,双线程。

3.关于线程与进程

每一个正在系统上运行的程序都是一个进程,一个进程包含一个或多个线程。进程可能是整个程序或者部分程序程序的动态执行。线程是一组执行的集合,或者是程序的特殊段,它可以在程序里独立执行,也可以把它理解为代码运行的上下文。所以线程是轻量级的进程。它负责在单个程序里执行多任务。通常是由操作系统来负责多个线程的调度和执行。

线程是程序里单一的顺序控制流程,在单个程序中同时运行多个线程完成不同的工作,称为多线程。

线程和进程的区别在于:子进程和父进程有不同的代码和数据空间。而多个线程则共享数据空间。每个线程都有自己的执行堆栈和程序计数器为其执行上下文。多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定。线程的运行中需要使用计算机的内存资源和CPU.

4.多线程的优缺点

优点;

1.可以把耗时较长的任务放到后台去处理。比如,下载图片。

2.可以有更好的用户交互。比如进度条的显示。

3.程序的运行速度可能加快。

缺点:

1.当线程数量较多的时候,会占用大量的CPU资源。而且执行的时间只慢不快。

2.开启一个线程需要占用一定的内存空间。默认情况下,是512K,如果开启大量的线程,会占用大量的内存空间,降低程序的性能。更多的线程需要更多的内存空间。

3.程序设计更加复杂,比如线程间的通信,多线程的数据共享,可能会给程序带来更多的BUG,因此要小心使用。

4.通常块模型的数据在多个线程间共享的,需要进行合理的管理。

既然有优点也有缺点,那么为什么我们要学习和使用多线程编程技术呢?

一个个的按顺序执行程序是无法忍受的,比如你显示一个列表。里面很多人的头像,信息,但是下载头像需要大量的时间,你如果等待头像下载完毕,列表才能显示,是非常痛苦的,尤其在移动APP里,一切以用户的体验为第一重要任务。

在IOS开发里,在一个程序运行之后,默认开启一个线程,就是大家常说的“主线程”,或者“UI线程”。主线程一般用来刷新UI界面,处理UI事件。(比如点击,滚动,拖拽)等等。

在主线程的使用中要注意,不要将那些耗时的操作放到主线程中。

耗时操作会卡住主线程。严重影响用户体验。

转载于:https://www.cnblogs.com/howlaa/p/10608916.html

ios高级开发之多线程(一)相关推荐

  1. IOS高级开发之多线程(五)NSOperation 2

    接着看NSOperation.NSOperationQueue线程间的通信: 应用场景:比如我们经常把一些耗时的操作比如下载图片放在子线程,那么当这个完成之后,我们就需要回到主线程,这个时候就需要用到 ...

  2. 移动开发在路上-- IOS移动开发系列 多线程二

    最近太忙没太多的时间,忙碌的码农生活空下来一点时间,都会挤出来看一些技术或者咨询的文章,废话不多说,直奔主题. 接着上一次的继续说. 定时器在多线程的使用 NSRunLoop 是线程相关的基础框架的一 ...

  3. IOS高级开发 runtime(一)

    一. 简介 IOS 开发中灵活使用runtime 会提高我们的程序性能和开发速度.要想使用runtime,首先要引入系统的头文件. <span style="font-size:18p ...

  4. IOS高级开发 runtime(一) (皮拉夫大王深夜原创)

    一. 简介 IOS 开发中灵活使用runtime 会提高我们的程序性能和开发速度.要想使用runtime,首先要引入系统的头文件. <span style="font-size:18p ...

  5. 《转载》IOS高级开发~开机启动无限后台运行监听进程

    非越狱情况下实现: 开机启动:App安装到IOS设备设备之后,无论App是否开启过,只要IOS设备重启,App就会随之启动: 无限后台运行:应用进入后台状态,可以无限后台运行,不被系统kill: 监听 ...

  6. 移动开发在路上-- IOS移动开发系列 多线程一 [转]

    类似于什么是进程什么是线程在这里我就不多浪费时间了(Google一下什么都有)! 废话不多说先上图,我相信大家都是喜欢看图的人,俗话说得好,求图求真相吗?虽然这里只有屌丝一个但是真相还是会有的... ...

  7. IOS高级开发~开机启动无限后台运行监听进程

    非越狱情况下实现: 开机启动:App安装到IOS设备设备之后,无论App是否开启过,只要IOS设备重启,App就会随之启动: 无限后台运行:应用进入后台状态,可以无限后台运行,不被系统kill: 监听 ...

  8. 网易云课堂微专业--Java高级开发工程师--多线程并发编程--学习笔记(二)

    文章目录 第一章 多线程并发编程 第二节 线程安全问题 1.2.1 线程安全之可见性问题 多线程中的问题 从内存结构到内存模型 工作内存缓存 指令重排序 内存模型的含义 Shared Variable ...

  9. iOS 高级开发 KVC(一)

    转载地址:https://www.cnblogs.com/dengzhuli/p/4454516.html 熟练使用KVC 可以再开发过程中可以给我们带来巨大的好处,尤其是在json 转模型的时候,K ...

最新文章

  1. SQL 从一个表读取数据存到另一个表
  2. 【计算机网络】网络安全 : 运输层安全协议 ( 安全套接字层 SSL | 运输层安全 TSL | SSL 服务 | SSL 安全会话建立流程 )
  3. python mysql 编码方式,Python3编码与mysql编码介绍
  4. Redis 新特性篇:100% 掌握多线程模型
  5. 苹果CMS v10模板最近很火的电影先生v1.0.2修复版
  6. 不属于处理数据的计算机应用,计算机应用基础6
  7. 一起围观下我们CTO写的代码,巧妙使用枚举干掉if-else!
  8. windows 系统 使用 redis 客户端
  9. 0 基础 Java 自学之路(2021年最新版)
  10. 牛客网——程序员代码面试指南(更新ing)
  11. d3力导向图增加节点_在D3力导向图中突出显示所选节点,其链接及其子节点
  12. STM32F103的DAC实现播放WAV音乐
  13. 数组取出使用某一个entiti
  14. npm run dev报错 Class constructor ServeCommand cannot be invoked without new
  15. 大数据特点和基本处理流程
  16. 华为云在Linux ECS上使用obsutil通过内网访问OBS
  17. 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (二)
  18. 深度揭秘腾讯云新一代企业级HTAP数据库TBase核心概念
  19. 微信机器人-定制消息
  20. OSChina 周日乱弹 ——会爬墙的不仅仅是壁虎还有班主任

热门文章

  1. ceph存储原理_热门的分布式存储系统ceph入门介绍
  2. 电脑入门完全自学手册_3DMAX零基础入门到精通的学习路线和教程
  3. jenkins pipeline api获取stage的详细信息_Jenkins + Docker 助力 Serverless 应用构建与部署...
  4. 虚拟机游戏获取服务器地址,vue获取服务器地址
  5. scrt如何切换成英文版_英文版SecureCRT显示乱码解决
  6. 计算机硬件系统都是看得见的,计算机组成硬件系统).doc
  7. html表单中阴影,html5中input表单加边框,阴影效果.doc
  8. android触屏音文件地址,Android音视频-音频采集
  9. php authcode java_PHP(authcode)加密解密
  10. 160 - 48 DueList.3