多线程简单总结

多线程

1 多线程原理

多线程的原理就是在 APP 运行中,多个线程之间的关联.现在

  • 对于单核 CPU 来说,同一时间内,CPU 只能处理一个线程,
  • 多线程同时执行的实质是, CPU 在多条线程之间快速的切换.
  • 多核 CPU 来说,就是在同一时间内有多条线程可以同时执行

2 进程和线程

进程:(一个 APP 有一个进程)

1.1 进程是指在系统中正在运行的应用程序

1.2 每个进程之间的独立的,每个进程均运行在其专用的且受保护的内存空间内

1.3 通过 活动监视器 可以查看Mac 系统中所开启的进程

线程:

1.1 一个进程至少有一个线程组成

1.2 线程的进程的基本执行单元,一个进程是所有任务都在线程中执行

3 资源抢夺/死锁

多个线程同一时间内,共同访问一个资源.会造成资源的抢夺.线程之间(以 A 和 B 为例),A 等待 B 释放资源, B 等待 A 释放资源,相互之间等待会造成死锁.

4 NSThread,GCD&NSOperation

1)NSThread

优点:NSThread 比其他两个轻量级

缺点:需要自己管理线程的生命周期,线程同步。线程同步对数据的加锁会有一定的系统开销

2)Cocoa  NSOperation

优点:不需要关心线程管理, 数据同步的事情,可以把精力放在自己需要执行的操作上。

Cocoa operation相关的类是NSOperation, NSOperationQueue.

NSOperation是个抽象类,使用它必须用它的子类,可以实现它或者使用它定义好的两个子类: NSInvocationOperation和NSBlockOperation.

创建NSOperation子类的对象,把对象添加到NSOperationQueue队列里执行。

3) GCD(全优点)

Grand Central dispatch(GCD)是Apple开发的一个多核编程的解决方案。在iOS4.0开始之后才能使用。GCD是一个替代NSThread, NSOperationQueue,NSInvocationOperation等技术的很高效强大的技术。

5 线程之间的通信

5.1 全局变量

进程中的线程间内存共享.(常用)

注:定义全局变量的时候,最好要用volatile修饰,以免被系统修饰.

5.2 Message消息机制

常用的Message通信的接口主要有两个:PostMessage和PostThreadMessage, PostMessage为线程向主窗口发送消息。而PostThreadMessage是任意两个线程之间的通信接口。

时间: 2024-10-12 18:39:42

多线程简单总结的相关文章

iOS开发多线程篇—多线程简单介绍

iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过“活动监视器”可以查看Mac系统中所开启的进程 2.什么是线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 比如使用酷狗播放音乐.使用迅雷下载电影,都需要在线程中执行 3.线程

Java的多线程 简单入门

Java的多线程 简单入门 首先可以先搞清楚什么是程序.进程.线程,以及它们之间的关系: 定义: 一 程序只是一组指令的有序集合,它是静态的 二 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位: 三 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),一个线程可以创建和撤销另一个线程: 进程与线程区别与联系 (

iOS多线程技术—多线程简单介绍

iOS多线程技术—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过“活动监视器”可以查看Mac系统中所开启的进程 2.什么是线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 比如使用酷狗播放音乐.使用迅雷下载电影,都需要在线程中执行 3.线程的

Java 多线程 简单实例 (消费者与生成者)的关系

PS::线程这套东西在PHP里完全是不存在的概念,有待进一步的学习: PS::这个实例是根据书本上的知识进行扩展的,理解程度50%左右吧! 1.定义生产消费环境 package second; public class Queue { int value = 0; boolean isEmpty = true; /** * 生产者 * @param v */ public synchronized void put(int v){ if(!isEmpty){//如果存在数据没有被消费 try{

iOS 多线程简单使用的详解

主线程 一个iOS程序运行后,默认会开启1条线程,称为"主线程"或"UI线程"(刷新UI界面最好在主线程中做,在子线程中可能会出现莫名其妙的BUG) 主线程的作用  显示\刷新UI界面 处理UI事件(比如点击事件.滚动事件.拖拽事件等) 注意点  别将比较耗时的操作放到主线程中 耗时操作会卡住主线程,严重影响UI的流畅度,给用户一种"卡"的坏体验 iOS中多线程的实现方案  pthread(c语言,程序员管理) 一套通用的多线程API 适用于Un

java多线程(简单介绍)

简单介绍 线程是程序运行的基本执行单元.当操作系统(不包括单线程的操作系统,如微软早期的DOS)在执行一个程序时,会在系统中建立一个进程,而在这个进程中,必须至少建立一个线程(这个线程被称为主线程)来作为这个程序运行的入口点.因此,在操作系统中运行的任何程序都至少有一个主线程. 线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段部所使用的数据,如线程执行函数中所定义的变量. 注意:任何一个线程在建立时都会执行一个函

多线程简单编程

根据我的上一篇随笔来看,基本的都已经解释清楚了,现在写几段简单的代码来了解一下多线程. public class Lamb extends Thread{ public void run() { for(int i=0;i<10;i++) { System.out.println("Lamb"); } }} public class Wolf implements Runnable{ public void run() { for(int i=0;i<10;i++) { S

多线程简单实例

主函数: package com.thread; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class WorkThreadSample { public static void main(String args[]) throws InterruptedException { // 任务List: 15个任务 List<Work> workList = new Ar

一:多线程--多线程简单介绍

一.进程和线程 1.什么是进程:进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 2.什么是线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 二.多线程 1.什么是多线程:1个进程中可以开启多条线程,每条线程可以并行(同时)执行不同的任务 2.多线程的原理 同一时间,CPU只能处理1条线程,只有1条线程在工作(执行) 多线程并发(同时)执行,其实是CP