多线程之概念解析

在介绍多线程之前明确几个概念

进程和线程

进程:是计算机中已运行的实体(计算机可以工作都是进程的功劳),进程是指在系统中正在运行的一个应用程序

线程:操作系统能够运行调度的最小单元(它是进程的组成部分)负责进程执行,一个线程的所有任务都是在线程中执行

区别和联系:

  1. 一个程序至少要有进程,一个进程至少要有一个线程.
  2. 进程:资源分配的最小独立单元,进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.
  3. 线程:进程下的一个分支,是进程的实体,是CPU调度和分派的基本单元,它是比进程更小的能独立运行的基本单位,线程自己基本不拥有系统资源,只拥有一点在运行中必不可少的资源(程序计数器、一组寄存器、栈),但是它可与同属一个进程的其他线程共享进程所拥有的全部资源。
  4. 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。
  5. 进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。
  6. 但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
  7. 同一个进程内的线程共享进程资源

队列: 装载线程任务的数据结构,先进先出,排在前面的任务最先执行,队列分为串行、并行、全局和主队列。队列只是负责任务的调度,而不负责任务的执行

任务:任务的执行分为同步和异步,任务是在线程中执行的

同步和异步

同步:同步任务不会开启新的线程,按顺序执行,执行完一个再执行下一个,需要等待、协调运行;
异步:异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。在大多数情况下,执行异步任务时会创建新的线程(在调用block代码块或开启定时器时一般是不会开启新的线程的)

区别和联系:

串行:任务按照顺序被调度,前一个任务不执行完毕,队列不会调度,任务只会顺序执行
并行(并发):指队列中的线程任务执行可以同时进行

队列与任务的组合

串行队列同步执行:    队列会按顺序来调度任务,任务在一个线程里运行,one by one

串行队列异步执行: 按顺序来调度任务,任务会创建新的线程,one by one

并行队列同步执行: 即使不会等待一个任务执行完毕便再次调度下一个任务(调度任务,不控制任务的执行),但同步任务不会开启新的线程,one by one

并行队列异步执行: 操作会新建多个线程(有多少任务,就开n个线程执行)、操作无序执行;不会强制来等待上一个任务执行完毕,而是会在有空闲线程时来继续调度下一个任务,而此时任务会创建新的线程来执行,故这种组合可以实现任务的并发

全局队列异步执行:操作会新建多个线程、操作无序执行

全局队列同步执行:操作不会新建线程、操作顺序执行

主队列异步执行:操作都应该在主线程上顺序执行的,不存在异步的概念

主队列同步执行:如果把主线程中的操作看成一个大的block,那么除非主线程被用户杀掉,否则永远不会结束;主队列中添加的同步操作永远不会被执行,会死锁

  并发队列 串行队列
同步 不开启新的线程,串行 不开启新的线程,串行
异步 开启新的线程,并发 开启新的线程,串行
时间: 2024-08-06 03:25:33

多线程之概念解析的相关文章

mongodb基本概念解析

MongoDB 概念解析 不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档.集合.数据库,下面我们挨个介绍. 下表将帮助您更容易理解Mongo中的一些概念: SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table collection 数据库表/集合 row document 数据记录行/文档 column field 数据字段/域 index index 索引 table joins   表连接,Mong

iOS开发——实战篇Swift篇&UItableView结合网络请求,多线程,数据解析,MVC实战

UItableView结合网络请求,多线程,数据解析,MVC实战 学了这么久的swift都没有做过什么东西,今天就以自己的一个小小的联系,讲一下,怎么使用swift在实战中应用MVC,并且结合后面的高级知识:网络请求,JSON数据解析一起应用到一个项目中来. 好了,废话不多说,我们直接开始吧. 首先看看最终的效果: 是不是很简单,就是个UItableView显示一些简单的数据,如果你真的觉得太简单了,那么请绕道,寻找更深入东西,但或者没有你想的那么简单,这不仅仅是一个tableView,为什么呢

多线程的概念

多线程的概念 一.程序与进程 1.程序:一段静态的代码. 2.进程:程序的一次动态执行过程,它对应从代码加载.执行到执行完毕的一个完整过程. 3.进程也称任务,支持多个进程同时执行的OS就被称为多进程OS或多任务OS. 二.进程与线程 在一个程序内部也可以实现多个任务并发执行,其中每个任务称为线程. 线程是比进程更小的执行单位,它是在一个进程中独立的控制流,即程序内部的控制流. 特点:线程不能独立运行,必须依赖于进程,在进程中运行. 每个程序至少有一个线程称为主线程. 单线程:只有一条线程的进程

MongoDB 概念解析

MongoDB 概念解析 不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档.集合.数据库,下面我们挨个介绍. 下表将帮助您更容易理解Mongo中的一些概念: SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table collection 数据库表/集合 row document 数据记录行/文档 column field 数据字段/域 index index 索引 table joins   表连接,Mong

Photoshop入门教程(一):文本新建与概念解析

写在开头 <Photoshop实用入门>系列教程可能对于一点都没有接触过Photoshop的人来说不太容易接受,因为本教程并没有细致到教你如何使用画笔工具等一系列很基础的东西,有些地方的讲解可能还会有一点点跨越.所以建议会基本操作的初学者学习,通过对本教程的学习,真正步入Photoshop奇妙的世界,真正入门. Photoshop简介 Photoshop是大名鼎鼎的图像处理软件,是由Adobe开发的,主要处理以像素所构成的数字图像. Photoshop版本 作为初学者,第一要面临的就是软件版本

SQL Server扩展事件(Extended Events)-- 扩展事件概念解析

SQL Server扩展事件(Extended Events)-- 扩展事件概念解析 下图描述了扩展事件中引入的几个新概念: 事件 事件是指代码中定义的点.此类示例包括:T-SQL 语句完成执行时的点或结束获取锁定时的点.每个事件都有一个定义的负载(该事件返回的列的集合),它是使用 ETW 模型(其中每个事件都返回一个通道和关键字作为负载的一部分)来定义的,以便能够与 ETW 集成.SQL Server 2008 最初提供 254 个定义的事件,预计在今后还会增加. 使用下列代码可以查看这些定义

New UI-屏幕分辨率,屏幕尺寸,像素,dpi概念解析

屏幕分辨率,屏幕尺寸,像素,dpi概念解析            --转载请注明出处:coder-pig,欢迎转载,请勿用于商业用途! 小猪Android开发交流群已建立,欢迎大家加入,无论是新手,菜鸟,大神都可以,小猪一个人的 力量毕竟是有限的,写出来的东西肯定会有很多纰漏不足,欢迎大家指出,集思广益,让小猪的博文 更加的详尽,帮到更多的人,O(∩_∩)O谢谢! 小猪Android开发交流群:小猪Android开发交流群群号:421858269 新Android UI实例大全目录:http:/

Java多线程编程总结一:多线程基本概念

Java多线程编程总结一 – 初识多线程 进程.多进程.线程.多线程的概念 进程(process):CPU的执行路径.通俗的说就是系统中正在运行的程序.比如我们打开了浏览器.QQ等等,这些程序一旦被打开运行了,就是所谓的进程. 多进程:系统中同时运行的多个程序.这个我们应该不难理解了,在打开浏览器的同时我们也可以QQ聊天.CS单机游戏等. 线程(thread):运行在进程中的运行单元.比如迅雷下载中我们的某一个下载任务就是一个线程. 多线程:同理可知,每个进程里面有多个独立的或者相互有协作关系的

Android实习札记(4)---Fragment(碎片)基本概念解析

Android实习札记(4)---Fragment(碎片)基本概念解析 转载请注明出处:coder-pig Fragment相信大家都不会陌生吧,侧滑啦,抽屉效果啦,DialogFragment啊等等,一堆地方都会 用到Fragment,对于Fragment的基本概念在前面的文章中其实已经给出的了,这里回顾一遍, 温故而知新嘛,同时结合Google官方的api进行复习! 1)什么是Fragment以及它的生命周期: 核心要点: 1)3.0版本后引入,即minSdk要大于11 2)Fragment