线程

多线程

僤鯓⒐⒋嵵緔 提交于 2020-03-08 16:37:35
  大家好,本章我将给大家分享一下前几天自己对多线程的认知。    多线程 :是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。       线程是程序中一个单一的顺序控制流程.在单个程序中同时运行多个线程完成不同的工作,称为多线程.       线程和进程的区别在于,子进程和 父进程 有不同的代码和 数据空间 ,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,发挥利用,      根据具体情况而定. 线程的运行中需要使用计算机的内存资源和CPU。    多线程的三大特性: 原子性,可见性,有序性      原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。      可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。     有序性:即程序执行的顺序按照代码的先后顺序执行。    多线程的优缺点:   优点:     ·使用线程可以把占据时间长的程序中的任务放到后台去处理     ·用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个 进度条 来显示处理的进度     ·程序的运行速度可能加快     

操作系统CPU调度知识点

橙三吉。 提交于 2020-03-08 16:06:14
1、 进程基本概念 :进程是程序的一次运行。 是系统进程资源分配和调度的基本单位。 2、进程三态:运行状态、就绪状态、堵塞状态。三态转换规则, 就绪状态 的进程因为调度进程 运行状态 , 运行状态 因为时间片用完而进入 就绪状态 ,因为I/O请求而进入 堵塞状态 。I/O完毕后进入 就绪状态。 创建完毕直接进入 就绪状态 。等待处理机调度。 3、 挂起状态引入原因 :1)终端用户请求。2)父进程请求,3)负荷调节须要,4)操作系统须要。 原三态进一步能够分为:运行状态、活动就绪状态、精巧就绪状态、活动堵塞状态、精巧堵塞状态;处于活动态的进程因为挂起请求而进行精巧状态。 进程创建完毕可直接进入活动就绪状态和精巧就绪状态。程序运行结束就可以进入终止状态。 4、 进程控制块(PCB) :进程标识符、处理机状态、进程调度信息、进程控制信息(程序、数据、资源清单等)。PCB是进程存在的唯一标志。 5、创建进程 创建进程的可能原因:用户登录、作业调度、提供服务、应用请求等。 创建进程过程:1)申请空白PCB,2)为进程分配资源,3)初始化PCB。4)将新进程插入到就绪队列。 6、终止进程 终止进程原因:正常结束、异常结束、外界干预等。 终止进程过程:1)依据进程标识符。在PCB集合中找到目标进程,2)终止该进程的运行,3)撤销其子进程,4)归还系统资源。5)撤销PCB。 7、进程同步概念

堆栈简析

て烟熏妆下的殇ゞ 提交于 2020-03-08 14:46:34
   (如果感觉有帮助,请帮忙点推荐,添加关注,谢谢!你的支持是我不断更新文章的动力。本博客会逐步推出一系列的关于大型网站架构、分布式应用、设计模式、架构模式等方面的系列文章) 数据类型   Java 虚拟机中,数据类型可以分为两类: 基本类型 和 引用类型 。    基本类型的变量保存原始值,即:它代表的值就是数值本身;   而引用类型的变量保存引用值。 “ 引用值 ” 代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。   基本类型包括: byte,short,int,long,char,float,double,Boolean,returnAddress   引用类型包括:类类型、接口类型和数组。 堆与栈    堆和栈是程序运行的关键,很有必要把他们的关系说清楚。   (1) 堆是存储的单位,栈是运行时的单位   (2) 堆解决的是数据存储的问题,即数据怎么放、放在哪儿;    栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。     在 Java 中 一个线程就会相应有一个线程栈与之对应 ,这点很容易理解,因为不同的线程执行逻辑有所不同,因此需要一个独立的线程栈。     而 堆则是所有线程共享的 。栈因为是运行单位,因此里面存储的信息都是跟当前线程(或程序)相关信息的。包括局部变量、程序运行状态、方法返回值等等

JVM基础:深入学习JVM堆与JVM栈

假如想象 提交于 2020-03-08 14:46:09
以前堆是干啥栈是干啥都知道,就是没连在一起想想。感觉讲的不错的一篇儿~~ 转自: http://developer.51cto.com/art/201009/227812.htm JVM栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;JVM堆解决的是数据存储的问题,即数据怎么放、放在哪儿,另外JVM堆中存的是对象。JVM栈中存的是基本数据类型和JVM堆中对象的引用。 JVM基础概念:JVM堆与JVM栈 数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。 基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAddress 引用类型包括:类类型,接口类型和数组。 JVM堆与JVM栈 JVM堆和JVM栈是程序运行的关键,很有必要把他们的关系说清楚。 JVM栈是运行时的单位,而JVM堆是存储的单位。 JVM栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;JVM堆解决的是数据存储的问题,即数据怎么放、放在哪儿。 在Java中一个线程就会相应有一个线程JVM栈与之对应,这点很容易理解,因为不同的线程执行逻辑有所不同

JVM概念总结:数据类型、堆与栈

谁都会走 提交于 2020-03-08 14:40:46
  Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;   引用类型的变量保存引用值,引用值代表了某个对象的引用而不是对象的本身,对象的本身存放在这个引用值所标示的地址的位置。   基本的数据类型包括:byte,short,int,long,float,double,boolean,returnAddress   引用类型包括:类类型,接口类型和数组。   堆与栈:堆与栈是程序运行的关键。   栈是运行时的单位,而堆是存储的单位。   栈解决程序的运行问题,即程序如何运行,或者说如何处理数据;堆解决的是数据存储问题,即数据怎么放,放在哪 在Java中一个线程就会对应有一个线程栈与之对应,这点很容易理解,因为不同的线程执行的逻辑不同,因此需要一个独特的线程栈。而堆是所有的线程所共享的。栈因为是运行的单位,因此里面存储的信息都是跟当前线程相关的。包括局部变量、程序的运行状态,方法的返回值等等,而堆只负责存储对象的信息。 为什么要把堆和栈区分出来呢?栈中不是也可以存储数据吗? 第一,从软件设计的角度看,栈代表了处理逻辑,而堆代表了数据。这样分开,使得处理逻辑更为清晰。分而治之的思想。这种隔离、模块化的思想在软件设计的方方面面都有体现。 第二,堆与栈的分离,使得堆中的内容可以被多个栈共享(也可以理解为多个线程访问同一个对象)

《iOS简单网络传输》iOS7 CookBook系列

回眸只為那壹抹淺笑 提交于 2020-03-08 14:40:27
如何利用 NSURLConnection 来获得网络资源? 引用书中的话 “ 有使用NSURLConnection的两个方法。一个是异步的,而另一个是同步的。异步连接将创建一个新的线程并执行其下载过程在新线程。一个同步连接将阻塞调用线程且同时下载的内容。 许多开发者认为,一个同步连接阻塞主线程,但是这是不正确的。一个同步连接将始终阻止它被启动的线程。如果你从主线程的启动同步连接,是的,主线程将被阻塞。但是,如果你从一个线程在主线程之外启动同步连接,它会像一个异步连接,它不会阻止你的主线程。 实际上,同步和异步连接之间的唯一区别在于,运行时< runtime >将为异步连接创建一个线程,而它不会对一个同步连接这样做。 ” 异步连接的过程: 为了创建一个异步连接,我们需要做到以下几点:1。在NSString的实例URL 2。我们的字符串转换为NSURL的一个实例。 NSString * urlAsString = @" http://www.apple.com " ; NSURL * url = [ NSURL URLWithString : urlAsString ]; 3.我们可以创建一个异步的URL连接 NSURLRequest * urlRequest = [ NSURLRequest requestWithURL : url ]; 4.创建一个操作队列

《灵长类的为什么》——并发

孤街浪徒 提交于 2020-03-08 14:29:29
文章目录 并发的三大特性 并发的三大特性 1. 原子性 :一个或者多个操作要么全部执行、要么全部不执行; 2. 有序性 :由于JVM存在操作重排序,多线程中有序线程的切换可能会存在问题; 3. 可见性 :java线程存在自己的工作区域,由于更新工作区域却没及时刷新到主存,导致其他线程对该数据的修改不可见; 来源: CSDN 作者: 灵长类 链接: https://blog.csdn.net/qq_34316514/article/details/104728474

Code-C#-Delegate:委托(delegate)的三种调用方式:同步调用,异步调用,异步回调

。_饼干妹妹 提交于 2020-03-08 13:34:54
ylbtech-Code-C#-Delegate:委托(delegate)的三种调用方式:同步调用,异步调用,异步回调 1. 返回顶部 1、 下面为即将被调用的方法: public delegate int AddHandler(int a, int b); public class 加法类 { public static int Add(int a, int b) { Console.WriteLine("开始计算:" + a + "+" + b); Thread.Sleep(1000); Console.WriteLine("计算完成!"); return a + b; } } 同步调用 : class Program { static void Main() { Console.WriteLine("===== 同步调用 SyncInvokeTest ====="); AddHandler handler = new AddHandler(加法类.Add); int result = handler.Invoke(1, 2); Console.WriteLine("继续做别的事情。。。"); Console.WriteLine(result); Console.ReadKey(); } } invoke后阻塞主进程,直到handler执行完毕; ===== 同步调用

多线程简介

你。 提交于 2020-03-08 13:05:29
多线程简介 作用 多线程可以解决耗时操作(网络操作)卡顿UI的问题,将耗时操作放在后 台,待工作完成后,通知主线程更新UI 一个线程的数据可以直接提供给其他线程使用,叫做 线程间通信 线程生命周期的控制 分类 任务(代码)执行的俩种方式 同步:多个任务按顺序执行 异步:多个任务可以"同时"执行,异步就是多线程的代名词,使用多线程 技术就是为了让任务在子线程异步执行 内容 进程和线程 系统中,正在运行的程序,进程中的任务都是线程中执行的,线程是 进程最基本的执行单元,进程启动后,会默认开启一条线程,即是主线程 多线程 一个进程可以开启多个线程,同时异步执行不同的任务 执行原理:CPU在多个线程之间来回的切换调度线程执行 优缺点:可以"适当"提高程序执行的效率,还可以提升用户体验,但是当 线程非常多时,反而会大量的消耗CPU的资源 使用规则:在实际开发中,需要使用时尽量简单的使用,如果不需要使用, 绝对不要瞎用 注意 主线程/UI线程 是进程启动后,自动开启的,专门处理UI事件和刷新UI的,不要在主线程执 行耗时操作,会卡死UI __bridge(桥接) 当遇到C和OC混合开发时,需要用到桥接,在ARC环境下,编辑器不负责C 语言申请的内存,当涉及到OC和C语言的类型转换时,需要使用桥接告知 编辑器如何管理内存,在MRC环境下不需要 线程属性 主线程在IOS 8以后是512K

Python-多线程

梦想的初衷 提交于 2020-03-08 13:01:47
多线程 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的)。   thread在python3中被废弃了   python3中threading代替thread模块   为了兼容性 python3将thread改名为 “_thread”   python的标准库提供了两个模块 ,_thread(低级模块) 和 threading(高级模块) 1.threading 启动一个线程就是把一个函数传入并创建threading.Thread( )实例,然后调用start( )开始执行: import threading #导入线程模块 import time #线程函数 def foo(num): print('我的进程名字为:'+threading.current_thread().name) time.sleep(2) print(num) #创建进程 #callback:回调函数 一般用来接收子进程运行函数的返回值 t1 = threading.Thread(target=foo,args=(1,),callback=func) t2 = threading.Thread(target=foo,args=(2,)) #启动线程 t1.start() t2.start() #获取线程运行状态 True为运行 False为未运行 print(t1.is