IOS 多线程-线程基础知识

大部分现代操作系统,包括IOS,都支持执行线程的概念。每个进程可以包含多个线程,他们可以同时运行。如果只有一个处理器核心,操作系统将在所有执行线程之间切换,非常类似于在所有执行线程之间切换。如果拥有多个核心(核心),线程将像进程一样,分散到多个核心上去执行。

一个进程中的所有线程共享可执行程序代码和全局数据。每个线程也可以拥有一些独有的数据。线程可以使用一种成为互斥量或锁的特殊结构,这种结构可以确保特定的代码块无法一次没多个线程执行。在多个线程同时访问相同数据时,这有助于保证正确的结果,在一个线程更新某个值(在代码中称为临界区)时锁定其他线程。

处理线程的过程中我们通常会关注线程安全(thread-safe)问题。一些软件库在编写时考虑了线程并发性,并使用互斥量恰当地保护他们的所有临界区。也有一些代码库不是线程安全的。

举个例子,IOS的Cocoa Touch中,Foundation框架(包含适用于所有Object-C编程类型的基本类,如NSString、NSArray等)通常被视为线程安全的。但是,UIKit框架(包括专门构建GUI应用的类,如UIApplication、UIView及其所有子类等)是非线程安全的。这意味着一个运行的IOS应用中,处理任何UIKit对象的所有方法调用都应从相同线程执行,该线程称之为主线程-main thread。如果从另一个线程访问UIKit对象,那结果就发生很多意想不到的结果(错误)! --所以,更新UI要在主线程运行

默认情况下,主线程执行IOS应用的所有操作(比如处理用户时间触发的操作),所以对于简单应用,没有什么需要担心的,用户触发的动作已经(默认)在主线程中运行。

时间: 2024-11-03 21:17:50

IOS 多线程-线程基础知识的相关文章

线程基础知识

什么是线程: 在一个程序里的一个执行路线就叫做线程(thread).更准确的定义是:线程是"一个进程内部的控制序列" 一切进程至少都有一个执行线程 进程与线程 进程是资源竞争的基本单位 线程是程序执行的最小单位 线程共享进程数据,但也拥有自己的一部分数据 线程ID 一组寄存器 栈 errno 信号状态 优先级 fork和创建新线程的区别 当一个进程执行一个fork调用的时候,会创建出进程的一个新拷贝,新进程将拥有它自己的变量和它自己的PID.这个新进程的运行时间是独立的,它在执行时几乎

多线程编程基础知识

多线程编程基础知识 http://www.cnblogs.com/cy163/archive/2006/11/02/547428.html 当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义.现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的.因此掌握

线程基础知识系列(三)线程的同步

本文是系列的第三篇,前面2篇,主要是针对单个线程如何管理,启动等,没有过多涉及多个线程是如何协同工作的. 线程基础知识系列(二)线程的管理 :线程的状态,控制,休眠,Interrupt,yield等 线程基础知识系列(一)线程的创建和启动  :线程的创建和启动,join(),daemon线程,Callable任务. 本文的主要内容 何谓线程安全? 何谓共享可变变量? 认识synchronized关键字 认识Lock synchronized vs Lock 1.何谓线程安全 多线程是把双刃剑,带

多线程的基础知识

多线程编程基础知识 当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义.现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的.因此掌握多线程多任务设计方法对每个程序员都是必需要掌握的.本实例针对多线程技术在应用中经常遇到的问题,如线程间的通信.同步等,分

Boost::Thread 多线程的基础知识

Boost.Thread可以使用多线程执行可移植C++代码中的共享数据.它提供了一些类和函数来管理线程本身,还有其它一些为了实现在线程之间同步数据或者提供针对特定单个线程的数据拷贝.头文件:#include <boost/thread.hpp> 线程定义boost::thread 类是负责启动和管理线程.每个boost::thread对象代表一个单独的执行线程,是不可拷贝的.由于它是可以被移动到,所以它们可以被保存到会改变大小的容器中,并且从函数返回.这使得线程创建的详细信息可以被封装到一个函

线程基础知识系列(四)线程的同步2 线程通信和Condition变量

本文是系列的第四篇. 线程基础知识系列(三)线程的同步  :同步控制,锁及synchronized 线程基础知识系列(二)线程的管理 :线程的状态,控制,休眠,Interrupt,yield等 线程基础知识系列(一)线程的创建和启动  :线程的创建和启动,join(),daemon线程,Callable任务. 第三篇文章,重点阐述了如何使用锁和同步块对线程间共享可变变量保护,保证只有一个线程可以进入临界区.其实,没有过多的涉及另一个重要的同步概念:线程协作.第三篇中涉及的线程间并没有有效的协调.

线程基础知识系列(五)认识volatile

线程基础知识系列(四)线程的同步2  :线程的notify-wait通信机制,以及Condition条件变量 线程基础知识系列(三)线程的同步  :同步控制,锁及synchronized 线程基础知识系列(二)线程的管理 :线程的状态,控制,休眠,Interrupt,yield等 线程基础知识系列(一)线程的创建和启动  :线程的创建和启动,join(),daemon线程,Callable任务. 本篇文章主要讨论的关键字是volatile. volatile使用场景 volatile介绍 vol

IOS 教程以及基础知识

http://wenku.baidu.com/course/view/1ce3571252d380eb62946d8c http://iphone.apkbus.com/ www.itcast.cn //博客 http://blog.csdn.net/cutesource/article/details/7715593 // ios虚拟开发环境搭建 http://www.cnblogs.com/mjios/ //ios 博客 http://www.9ria.com/subject/summary

线程基础知识系列(二)线程的管理

本篇是线程基础知识系列的第二篇,主要简单江夏线程管理相关知识点. 线程基础知识系列(一)线程的创建和启动:说明了线程的2种创建和启动,join(),daemon线程,Callable 任务. 本文的主要内容 线程的状态 线程的优先级 sleep vs wait 线程的流程控制 Interrupt yield让出你的CPU 1.线程的状态 以<线程基础知识系列(一)线程的创建和启动>这张图,是程序的运行时线程信息截图.有main线程,user Threads,daemon Threads.现在咱