优先级

多线程

纵饮孤独 提交于 2020-03-12 05:21:33
多线程 进程 程序执行过程中具有动态性;持有资源和线程,是系统进行资源分配和调度的基本单位 线程 线程的分类 主线程:JVM调用程序mian()所产生的线程。 当前线程:这个是容易混淆的概念。一般指通过Thread.currentThread()来获取的进程。 后台线程:指为其他线程提供服务的线程,也称为守护线程。JVM的垃圾回收线程就是一个后台线程。 前台线程:是指接受后台线程服务的线程,其实前台后台线程是联系在一起,就像傀儡和幕后操纵者一样的关系。傀儡是前台线程、幕后操纵者是后台线程。由前台线程创建的线程默认也是前台线程。可以通过isDaemon()和setDaemon()方法来判断和设置一个线程是否为后台线程。 有时被称为轻量级进程,是程序执行中的最小单元 互斥与交互 线程实现方法 继承Thread类,重写该类的run()方法; 通过实现Runnable接口来创建线程,并重写该线程的run()方法 创建实现Callable和Future创建线程,实现call()方法 创建线程方法的优劣点 采用Runnable()、Callable()接口: 优点:还可以继承其他类,可以实现多个线程共享同一个target对象吗,从而可以将CPU,代码和数据分开,体现了较好的面向对象的思想 劣势:编程较为复杂,如果要访问当前线程需要使用Thread.currentThread()方法

什么是信号量?

折月煮酒 提交于 2020-03-11 19:51:12
信号量是一种编程概念,经常用于解决多线程问题。 我对社区的问题: 什么是信号量,如何使用? #1楼 因此,想象每个人都在尝试去洗手间,而洗手间只有一定数量的钥匙。 现在,如果没有足够的键,该人需要等待。 因此,可以将信号量视为代表可用于浴室(系统资源)的那些键集,以供不同进程(浴室行进者)请求访问。 现在想象一下试图同时去洗手间的两个过程。 那不是一个好情况,并且使用信号量来防止这种情况。 不幸的是,信号量是一种自愿机制,过程(我们的洗手间)可以忽略它(即,即使有钥匙,仍然有人可以将门打开)。 二进制/互斥量和计数信号量之间也存在差异。 在 http://www.cs.columbia.edu/~jae/4118/lect/L05-ipc.html上 查看讲义。 #2楼 构建并发程序有两个基本概念-同步和互斥。 我们将看到这两种类型的锁(信号灯通常是一种锁定机制)如何帮助我们实现同步和互斥。 信号量是一种编程结构,可通过实现同步和互斥来帮助我们实现并发。 信号量有两种类型,二进制和计数。 信号量包括两个部分:一个计数器和一个等待访问特定资源的任务列表。 信号量执行两项操作:wait(P)[就像获取锁一样],以及release(V)[类似于释放锁] –这是一个可以对信号量执行的仅有的两项操作。 在二进制信号量中,计数器在逻辑上介于0和1之间。您可以认为它类似于具有两个值的锁:打开

maven 配置文件详解 settings.xml

做~自己de王妃 提交于 2020-03-10 19:46:54
Maven项目对象模型(POM-Project Object Model),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。 软件版本: IntelliJ IDEA 2019.2.4 (Ultimate Edition) apache-maven-3.6.3-bin.zip IDEA 内置的 Maven: 在IDEA中,maven的默认配置是如下图 Maven home directory :maven的家目录,可以选择IDEA自带的版本,亦或是选择我们自己下载的版本(解压后的目录)。 User settings file :用户配置文件,默认是 C:\Users\Administrator\.m2\settings.xml Local repository :本地源目录,默认是 C:\Users\Administrator\.m2\repository 此外,我们在项目下,还会编辑一个pom.xml配置文件。 系统安装的 Maven: 也可以到maven官网下载安装 https://maven.apache.org/download.cgi 解压后的文件内容如下 还需要配置系统环境变量 M2_HOME=E:\Software\java_software\apache-maven\apache-maven-3.6.3 还需要在 “Path” 环境变量里添加

python中not or and的优先级用法

混江龙づ霸主 提交于 2020-03-10 13:32:46
在python中not or and 这三个布尔运算符是有优先顺序的,简单说来优先顺序就是:not > and > or . 记住了这个优先顺序,这时候如果输入not 1 or 2 and 3 那么应该返回的是什么呢? 答案是:3 原因是在 python 中当 or 左右两侧都为真时输出为左侧值,而and运算符是,当两侧为真时输出为右侧运算符。且在python中0和空值返回为假,其余数字返回都为真。 最后举一个小甲鱼视频中比较复杂的例子: not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9 按优先顺序应该是: not 1 or ( 0 and 1) or ( 3 and 4 ) or( 5 and 6 ) or ( 7 and 8 and 9 )结果为:4 来源: CSDN 作者: i_wave 链接: https://blog.csdn.net/i_wave/article/details/104746644

操作系统面试常常问到的问题

拥有回忆 提交于 2020-03-09 23:50:56
什么是操作系统?它的功能和特征? 操作系统就是管理和控制计算机硬件和软件资源的程序,它的管理功能有: 进程管理 内存管理 文件管理 I/O管理 操作系统是用户与硬件之间的接口,也是硬件和软件之间的接口。 操作系统的四大特征: 并发:两个或多个进程在同一时间间隔内发生,注意和并行的区别。 共享:系统中的资源可供多个并发执行的进程使用。 虚拟:把一个物理实体,变为若干个逻辑上的对应物,如虚拟处理器、虚拟内存、虚拟外部设备。 异步:由于多个程序并发执行和资源有限,进程执行是走走停停的。 什么是管态和目态?为什么要区分管态和目态? 管态:特权态/系统态/核心态,处于管态的程序可以访问计算机任何资源,访问权限不受限制。通常操作系统在管态运行。 目态:常态/用户态,处于目态的程序只能执行非特权指令,不能直接使用系统资源,不能改变CPU工作状态,且只能访问本程序的存储空间。 区分管态和目态的目的:出于安全考虑,保护操作系统程序。内核程序是用户程序的管理者,需要执行一些特权指令,如I/O指令,中断指令等,特权指令不允许用户直接使用。 如何从目态切换到管态 系统调用:使用中断机制,用户态的进程通过系统调用申请使用操作系统提供的服务程序,主动要求切换到内核态。 异常:CPU运行用户态进程时,发生异常,例如缺页,则会切换到处理当前异常的内核程序中。 I/O中断:I/O设备完成用户请求的操作后

操作系统常用调度算法

蓝咒 提交于 2020-03-08 16:06:56
转发自:http://blog.chinaunix.net/uid-25132162-id-361291.html 一、常见的批处理作业调度算法 1. 先来先服务调度算法(FCFS) :就是按照各个作业进入系统的自然次序来调度作业。这种调度算法的优点是实现简单,公平。其缺点是没有考虑到系统中各种资源的综合使用情况,往往使短作业的用户不满意,因为短作业等待处理的时间可能比实际运行时间长得多。 2. 短作业优先调度算法 (SPF): 就是优先调度并处理短作业,所谓短是指作业的运行时间短。而在作业未投入运行时,并不能知道它实际的运行时间的长短,因此需要用户在提交作业时同时提交作业运行时间的估计值。 3. 最高响应比优先算法(HRN): FCFS可能造成短作业用户不满,SPF可能使得长作业用户不满,于是提出HRN,选择响应比最高的作业运行。响应比=1+作业等待时间/作业处理时间。 4. 基于优先数调度算法(HPF): 每一个作业规定一个表示该作业优先级别的整数,当需要将新的作业由输入井调入内存处理时,优先选择优先数最高的作业。 5. 均衡调度算法,即 多级队列调度算法 基本概念: 作业周转时间(Ti)=完成时间(Tei)-提交时间(Tsi) 作业平均周转时间(T)=周转时间/作业个数 作业带权周转时间(Wi)=周转时间/运行时间 响应比=(等待时间+运行时间)/运行时间 二、进程调度算法

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

优先级

北慕城南 提交于 2020-03-07 18:17:28
C语言优先级 赋值运算符<逻辑与运算<关系运算符<算术运算符 来源: https://www.cnblogs.com/lihuanyu/p/12435524.html

【uCOSiii】任务管理

為{幸葍}努か 提交于 2020-03-07 07:09:55
uCOSiii 一个任务由三部分组成 ①任务控制块 :任务控制块os_tcb是一个比较复杂结构体,它用来保存任务的信息。在使用OSTaskCreate()时会创建任务时会分配一个任务控制块给任务。 ②任务堆栈 :每个任务都有任务堆栈CPU_STK,在进行任务切换时用来保存现场也就是将当前任务的状态和变量保存在自身的任务堆栈中,等到下次切换回来时,再将任务堆栈的内容取出。 ③任务函数 :也就是自己写应用程序。 uCOSiii 有五种任务状态 : ①休眠态 :还未用OSTaskCreate()创建任务时的状态,也就是一段未执行的代码。 ②就绪态 :已经记录在就绪表中的状态,等待获得cpu使用权 ③运行态 :正在运行的任务状态 ④等待态 :正在运行的任务为了等待内核对象比如信号量,消息暂时让出cpu使用权进入等待态,直到内核对象到达就会重新进入就绪态 ⑤中断服务态 :运行的任务被中断打断,cpu去执行中断,任务就挂起进入中断服务态。 任务就绪表由就绪任务列表跟优先级位映射表组成: **优先级位映射表:**简单地说就是用一个8或者16或者32位的数据的每一位代表一个优先级,某优先级下有就绪任务就会将相应的位置1 。OSPrioTbl[MAX]代表有多个32位组成的优先级位映射表;通过OS_PrioGetHighest()来获得优先级位映射表中最高优先级的任务。 就绪任务列表: struct