多线程基本概论multithread
多线程
基本概念
进程
- 进程是指在系统中正在运行的一个应用程序
- 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内
- 通过
活动监视器可以查看Mac系统中所开启的进程
线程
- 进程要想执行任务,必须得有线程,进程至少要有一条线程
- 程序启动会默认开启一条线程,这条线程被称为
主线程或UI 线程 - 线程是进程的基本执行单元,进程的所有任务都在线程中执行
多线程
- 一个进程中可以开启多条线程,每条线程可以
同时执行不同的任务进程-> 公司线程-> 员工主线程-> 老板(第一个员工)
- 多线程技术可以提高程序的执行效率
多线程原理
- 同一时间,CPU只能处理一条线程,只有一条线程在执行
- 多线程同时执行,其实是CPU快速地在多条线程之间切换
- 如果CPU调度线程的时间足够快,就造成了多线程并发执行的
假象 - 如果线程非常多,会在多条线程之间来回切换,消耗大量的 CPU 资源
- 每个线程被调度的次数会降低
- 线程的执行效率会下降
iOS 8.0 主线程的默认堆栈大小也是
512K
多线程优缺点
优点
- 能适当提高程序的执行效率
- 能适当提高资源利用率(CPU、内存利用率)
缺点
- 开启线程需要占用一定的内存空间,如果开启大量的线程,会占用大量的内存空间,降低程序的性能
- 线程越多,CPU在调度线程上的开销就越大
- 程序设计更加复杂:比如线程之间的通信、多线程的数据共享
主线程
- 程序启动创建的线程,被称为
主线程或UI 线程 - 主线程的作用
- 显示/刷新 UI 界面
- 处理 UI 事件:
点击、滚动、拖拽等事件
注意:要将
耗时操作放在后台线程执行,否则会影响 UI 的流畅度,破坏用户体验
- 所有网络访问都是耗时操作!
iOS中多线程的实现方案
| 方案 | 简介 | 语言 | 线程生命周期 | 使用频率 |
|---|---|---|---|---|
| pthread |
|
C | 程序员管理 | 几乎不用 |
| NSThread |
|
OC | 程序员管理 | 偶尔使用 |
| GCD |
|
C | 自动管理 | 经常使用 |
| NSOperation |
|
OC | 自动管理 | 经常使用 |
多线程基本概论multithread的更多相关文章
- iOS多线程的详情使用示例--简进祥
大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的,一个复杂的多步操作只能 ...
- iOS多线程开发
概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的,一个复杂的多步操 ...
- iOS 多线程详解
iOS开发 多线程 概览 机器码是按顺序执行的,一个复杂的多步操作只能一步步按顺序逐个执行.改变这种状况可以从两个角度出发: 对于单核处理器,可以将多个步骤放到不同的线程,这样一来用户完成UI操作后其 ...
- iOS多线程基本使用
大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的,一个复杂的多步操作只能 ...
- JDK的多线程与并发库
1.创建多线程 public class MultiThread { public static void main(String[] args) { // 通过继承Thread类 Thread th ...
- double check 解决单例模式的多线程并发问题
最近被多线程问题(multi-thread issue)弄昏了头.以前虽然也知道系统里要考虑多线程问题,也无数次见到double-check的代码,但是由于自己碰到这方面的问题基本上就是从其他地方 ...
- iOS多线程 NSThread/GCD/NSOperationQueue
无论是GCD,NSOperationQueue或是NSThread, 都没有线程安全 在需要同步的时候需要使用NSLock或者它的子类进行加锁同步 "] UTF8String], DISPA ...
- iOS开发系列--并行开发其实很容易
--多线程开发 概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的, ...
- iOS-多线程基础
进程与线程: 1> 一个应用程序对应一个进程,一个进程帮助程序占据一块存储空间 2> 要想在进程中执行任务,就必须开启线程,一条线程就代表一个任务 3> 一个进程中允许开 ...
随机推荐
- ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”解决办法
ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”解决办法 今天遇到的一个问题: 直接修改数据表中的某些字段数据内容时报错: ORA-01461: 仅可以为插入 LONG 列的 L ...
- 【LeetCode】3.Longest Substring Without Repeating Characters 最长无重复子串
题目: Given a string, find the length of the longest substring without repeating characters. Examples: ...
- 【SET】ORACLE SET 命令
set colsep' '; //-域输出分隔符 set echo off; //显示start启动的脚本中的每个sql命令,缺省为on set echo on ...
- nginx 配置.json文件直接访问
不要弹出下载 配置nginx.conf http { include mime.types; default_type application/json;
- 匿名管道 远程cmd
管道是单向的,传送数据的方向是固定的,所以互相通信需要两个管道. STARTUPINFO si; ZeroMemory(&si,sizeof(si)); si.dwFlags = STARTF ...
- oracle:jdbcTest
JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.l ...
- Leetcode049. Group Anagrams
//hashmap implement with STL class Solution { public: vector<vector<string>> groupAnagra ...
- HTML5-新API-geolocation-实例-距离跟踪器
<body onLoad="loadDemo()"> <header> <h1>oldmeter演示</h1> <h4> ...
- how to extract and decrypt WeChat EnMicromsg.db on Android phone
One of my friend came to me with an Android phone. She saild somehting wrong with the hardware of he ...
- Android IOS WebRTC 音视频开发总结(四一)-- QQ和webrtc打洞能力pk
很多人知道webrtc打洞能力很强,到底有多强但是不知道,比较好的方法就是跟QQ对比,但大多数公司很难模拟各种网络环境进行测试,比如联通,铁通,电信,移动,所以这次请小师妹在实验室下进行了一个比较全面 ...