多线程基础入门(快速预览)

多线程基础:


进程:

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

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

线程:

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

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

线程的串行

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

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

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

进程和线程的比较:

线程是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-11-07 06:14:16

多线程基础入门(快速预览)的相关文章

一个Django快速预览项目

创建一个Django项目,会用到一些包,但是下载多了会导致电脑变卡.变慢,这个时候可以用到虚拟环境来解决这个问题,每写一个项目,便可以在虚拟环境内配置各种环境而不影响电脑本身的环境. 我是用的是win10系统 首先先安装vitualenv: pip install virtualenv 如果系统内有多个python环境的话,可以指定使用哪一个版本的python来安装. python2 -m pip install virtualenv python3 -m pip install virtual

快速预览文档组件Oracle Outside In Technology

http://www.oracle.com/technetwork/cn/middleware/webcenter/content/downloads/oit-dl-otn-088510-zhs.html Viewer Technology 8.5.1 发布日期: 11/17/2014 该 SDK 将支持的文件类型的高保真表示呈现在一个视图窗口中,不依赖于原生应用.它提供文件查看.打印.复制/粘贴以及批注功能.可通过一个 C 语言 API 进行访问. 这个东西可以实现快速预览常见格式的文档,打开

高精度快速预览打开dwg文件的CAD控件CAD Image DLL介绍及下载

CAD Image DLL对于DXF格式, DWG格式(AutoCAD R12 到AutoCAD 2004/2005), PLT 以及 HPGL/HPGL2文件都有快速的显示速度和精度,开发者再也不会为如何打开dwg文件?dwg格式用什么打开?犯愁了.CAD Image DLL价格经济,是理想的商业化的程序内置CAD控件,包括Visual Basic, MS Visual C++, MS Visual Studio .NET, Borland Delphi, Borland C++ Builde

angularjs学习总结(快速预览版)

对html标签的增强 -> 指令 指令的本质是什么 声明的方式调用相应的脚本,实现一些操作,声明的所在的dom就是脚本的执行上下文? 自定义标签 -- 标签指令自定义属性 -- 属性指令特定格式注释 -- 注释指令 概念模板 视图 模型 模块 指令 依赖注入 路由 > MVVM其他MVC框架 backbone emberjsAngular不依赖其他任何框架AngularJs重新定义了前端应用的开发方式,AngularJs特别适合开发单页面应用(SPA) > AngularJs的特性1.

Sublime Text3如何快速预览html文件

Sublime Text3 步骤1:选择 Tools----> Build System ----> New Build System... 步骤2:输入以下内容 "cmd":["explorer.exe","$file"] 步骤3:重命名文件并保存然后用快捷键Ctrl+B即可打开默认浏览器进行预览 原文地址:https://www.cnblogs.com/wuyiz/p/9643851.html

Java 9 新特性快速预览

原文出处:wangwenjun69 Java 8 已经出来三年多的时间了,原本计划2016年七月份release Java 9,但是基于种种原因,Java 9 被推迟到了2017年的3月份,本人也在Open JDK的官网上看到了Java 10的标准也在制定当中,Java的发展真的越来越快了,在Java 9正式发布之前,我们可以使用它的SNAPSHOT版本,先来体验一下Java 9 有哪些新的特性,下面的清单来自于官方文档,看着似乎很多,但是真正具有颠覆意义的其实就是Module System,其

利用 ICEpdf 快速实现 pdf 文件预览功能

之前工作中,需要实现一个在线预览pdf的功能,一开始用的的 jQuery-media 插件来实现的,后来感觉有点慢,就继续寻找更好的替代品,直到遇见了 ICE pdf... ICEpdf (官网:http://www.icesoft.org/java/home.jsf) 原理是基于 Java SE 中的 Swing 实现的 (谁说 Swing 没有用武之地了...) ,将一个 PDF 文件作为一个 Document 对象,调用封装的方法,将该文件的每一页生成一张图片! 关键代码如下: publi

零基础入门 实战mpvue2.0多端小程序框架

第1章 课程快速预览(必看!!!)在这一章节中,老师讲带领你快速预览课程整体.其中,涉及到为什么要做这么一门实战课程.制作一个小程序的完整流程是怎么样的,以及如何做项目的技术选型. 第2章 30 分钟快速入门微信小程序(已掌握,可略过)在这一章节中,老师讲带领你从如何注册微信小程序开发者账号.工具的下载开始,到完成第一个小程序,再到组件与 API 的使用整个过程,最后来总结微信原生小程序的缺点. 第3章 30 分钟快速入门 Vue.js 框架(已掌握,可略过)在这一章节中,老师将带领你从第一个

Android中实时预览UI和编写UI的各种技巧

一.啰嗦 之前有读者反馈说,你搞这个所谓的最佳实践,每篇文章最后就给了一个库,感觉不是很高大上.其实,我在写这个系列之初就有想过这个问题.我的目的是:给出最实用的库来帮助我们开发,并且尽可能地说明这个库是如何编写的,希望让初创公司的程序员少写点给后人留坑的代码(想必大家对此深有体会).我之前给出的库都是很简单基础的,基本是一看就懂(但足够精妙),如果以后的文章涉及到了复杂的库,我会专门附加一篇库的讲解文.如果一个库的原理你知道,此外这个库很容易扩展和维护,而且它还用到了很多最佳实践的经验,你为什