多线程基础(一)基础中的基础

多线程基础:


先上个以下关于进程、线程和任务的基本的概念的概括图:

 

 

进程:

     系统中正在运行的一个应用程序(一种状态)。

     每个进程之间是相互独立的,每个进程在其受保护专用的内存空间内。

 

线程:

     一个进程要想执行任务,必须要有线程(每个进程至少有一条线程)

     一个进程所有的任务都是在线程中执行的。

 

线程的串行

     一个线程中的任务的执行是串行的

     如果在一个线程中执行多个任务,那么只能一个一个按顺序执行这些任务

     同一个时间内,一个线程只能执行一个任务

 

进程和线程的比较:

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

进程是CPU分配资源和调度的单位

一个程序可以对应多个进程,一个进程中可以有多个线程,但至少要一个线程

同一个进程内的线程共享进程的资源

 

一个进程中可以开启多条线程,每条线程可以并行(同时)执行不同的任务

多线程可以提高执行效率

 

开发中一般开3~5条线程即可,不要太多

 

多线程的优缺点:

 

优点

能适当提高程序执行效率

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

 

缺点:

创建线程是有开销的,iOS下主要成本包括:内核数据结构

如果开启大量的线程,会降低程序的性能

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

(重难点)程序设计更加复杂:比如线程之间的通信,多线程的数据共享

 

 

 

主线程

     一个IOS程序运行后,默认会开启1条线程,成为"主线程”或"UI线程"

     作用:

          显示/刷新UI界面

          处理UI事件

 

     使用注意:

          别把耗时的操作放在主线程中

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

 

 

验证按钮的点击事件是在主线程中执行的

 

 

 

1 //模拟耗时操作
2 for(NSInteger i = 0;i<100000;i++)
3 {
4      NSLog…...
5 }

不要将耗时操作放在主线程中,凡是跟UI相关的操作都是放在主线中处理

 

耗时操作应该放在子线程(后台线程,非主线程)

 

 

 

 

时间: 2024-09-21 01:32:07

多线程基础(一)基础中的基础的相关文章

Java中的基础构建模块(第五章)

Java中的基础构建模块 Java平台类库包含了丰富的并发基础构建模块,例如线程安全的容器类以及各种用于协调多个相互协作的线程控制流的同步工具类. 1.同步容器类 同步容器类都是线程安全的,但在某些情况下可能需要额外的客户端加锁来保护复合操作.常见的复合操作包括:迭代.跳转(在容器内元素之间).条件运算(例如"若没有则添加"). 隐式迭代:某些情况下迭代操作会隐藏起来.如下代码中println调用Set的toString方法,然后对Set中的对象进行迭代调用toString方法: pu

智能投顾中的基础核心,华尔街老司机手把手教你搭建智能资产配置模型

随着人工智能以不可阻挡的态势渐渐渗透到我们日常生活的方方面面,在高度量化的金融投资领域,变革求新.提速高效的追求也催生了智能投顾作为AI全新产品的蓬勃发展.大量的金融科技.人工智能相关岗位的招聘和交易员.量化研究员岗位的消失正见证着这一AI新业态随着时代发展的崭新面貌,那么在着手构建智能投顾产品具体操作的过程中,该如何去建立核心模型这一"心脏部位"去投入运行?雷锋网AI金融评论与AI慕课学院主办的智能投顾配置特训班讲师王蓁特别指出,智能投顾整体模型的关键在于运算公式的建立和参数的估计.

java 数组中的基础问题?????

问题描述 java 数组中的基础问题????? package com.songlei.hello.main; public class one { public static void main(String[] args) { // TODO Auto-generated method stub int bb[][]=new int[4][]; bb[0]=new int[1]; bb[1]=new int[2]; bb[2]=new int[3]; bb[3]=new int[4]; in

web前端-WEB前端基础 下列代码中,错误的是()?

问题描述 WEB前端基础 下列代码中,错误的是()? A. 01发票信息 发票抬头: 发票内容: B.发票信息 发票抬头: 发票内容: C.% D. 搜索"恒高科技": 解决方案 web前端基础Web前端基础[WEB基础]⑤一些前端小东西 解决方案二: 你这个是不是有格式的啊? 解决方案三: 我表示看不懂,是不是内容不全啊 相关文章 代码-WEB前端基础 答案为什么是B html-如何才能系统的学习web前端呢 web前端-css遇到十分基础的问题,求解释 web前端框架挑选问题,踊跃

js基础之DOM中document对象的常用属性方法详解_javascript技巧

-----引入 每个载入浏览器的 HTML 文档都会成为 Document 对象. Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问. 属性 1  document.anchors  返回对文档中所有 Anchor 对象的引用.还有document.links/document.forms/document.images等 2  document.URL       返回当前文档的url 3  document.title       返回当前文档的标题 4  do

js基础之DOM中元素对象的属性方法详解_javascript技巧

在 HTML DOM (文档对象模型)中,每个部分都是节点. 节点是DOM结构中最基本的组成单元,每一个HTML标签都是DOM结构的节点. 文档是一个    文档节点 . 所有的HTML元素都是    元素节点 所有 HTML 属性都是    属性节点 文本插入到 HTML 元素是    文本节点 注释是    注释节点. 最基本的节点类型是Node类型,其他所有类型都继承自Node,DOM操作往往是js中开销最大的部分,因而NodeList导致的问题最多.要注意:NodeList是'动态的',

server-sql sever 2008 中的基础小问题 大家帮忙看一下为什么

问题描述 sql sever 2008 中的基础小问题 大家帮忙看一下为什么 delete QQUser where DATEDIFF (DD ,lastLogTime,GETDATE())>=1000 消息 547,级别 16,状态 0,第 2 行 DELETE 语句与 REFERENCE 约束"FK_Relation_QQUser"冲突.该冲突发生于数据库"QQMaster",表"dbo.Relation", column 'QQID'

JavaScript基础知识点归纳(推荐)_基础知识

定义在函数外的变量一定是全局变量:定义在函数内的变量,如果声明了var,那该变量就是局部变量,如果不声明var,那么该变量就是全局变量. 1.全局变量与局部变量 JavaScript var global = "Global"; test(); function test(){ var local = "Local"; document.writeln(global); document.writeln(local); } document.writeln(glob

《SolidCAM+SolidWorks 2014中文版数控加工从入门到精通》——第1章 SolidCAM基础 1.1 CAD/CAM基础

第1章 SolidCAM基础 1.1 CAD/CAM基础 SolidCAM+SolidWorks 2014中文版数控加工从入门到精通在当今高效益.高效率.高技术竞争的时代,要适应瞬息万变的市场要求,提高产品质量,缩短生产周期,就必须采用先进的设计制造技术.计算机技术与机械设计制造技术相互结合与渗透,产生了计算机辅助设计与辅助制造(Computer Aided Design and Manufacturing)技术,简称CAD/CAM.它是以计算机作为主要技术手段,帮助人们处理各种信息,进行产品的

有没有大神说下多线程在实际开发中怎么用

问题描述 有没有大神说下多线程在实际开发中怎么用 看完多线程虽然能看懂代码但是始终不能明白多线程的实际应用求点醒!!!**** 解决方案 处理并发,或者对某些内容分块处理,放置进程阻塞,在现在多cpu的情况下,多线程更能凸显它的优势,一堆请求进来,如果你一个个挨着处理,效率会非常低,所以你可以启动多线程, 每个线程负责一部分 解决方案二: 多线程程序中,多个线程被并发的执行以提高程序的效率,CPU不会因为某个线程需要等待资源而进入空闲状态实际开发中用到的不多,比如数据处理,数据量非常大,又可以分