米鼠商城

多快好省,买软件就上米鼠网

最新项目

人才服务

靠谱的IT人才垂直招聘平台

操作系统的进程与线程知识汇总

  • Elli_ON
  • 2
  • 2020-03-21 14:33

上一篇:Java 中“>>”和“>>>”有什么区别?

1、栈里的数据: 栈帧:描述方法的一次执行瞬间——方法开始执行了,生成战帧,方法执行结束了,销毁栈帧。 栈帧里有局部变量/方法的形参

2、 计算机的主要目的:运行各种各样的程序,程序是通过进程这个抽象的过程跑起来。

3、 OS(操作系统)是一个管理的软件,管理两类:有形的硬件和无形的活动。 操作系统所谓的管理,即管理资源的分配权,资源是以进程的单位分配出去的。 分为:进程管理,内存管理,文件管理,网络管理,驱动管理。

4、 代码只有到CPU上才能运行。所以CPU资源是最最宝贵的。

5、 进程管理/进程调度:OS通过不断切换进程,实现分配CPU资源到进程的管理。

6、 进程会切换的几种可能时机: i) 被高优先级进程抢占 ii) 执行结束 iii) 等待外部IO事件 iv) 主动放弃 v) 时间片耗尽(实现一个同时运行的假想)

7、 进程切换(执行操作系统的代码完成): I) 会对当前进程的上下文保护 II) 会对下一个进程的上下文恢复。

8、 进程是操作系统资源分配的最小单位。 线程是操作系统调度的最小单位(操作系统CPU资源分配的最小单位),以Thread对象去描述。

9、 初始化对象的属性信息: I) pid II) 程序信息 III) 统计信息 IV) 调度信息

10、程序如果要执行,线程必须要抢到CPU资源。

11、 多线程的适用场景是什么?优点是什么? 1) 可能提升执行的速度(多一个调度单位,多有机会抢到一次CPU)。 2) 某些场景下,必须多线程才能处理,例如有阻塞时IO时(一个调度单位倒下了,剩下的调度单位还能抢CPU工作)。

12、覆写run方法的目的,只是指导线程应该进行的工作,没有其他作用。 Start不需要覆写,而调用start方法,会把线程放到就绪队列中,拥有调度机会(抢CPU的机会)。

13、线程常见属性:ID,名称,状态,优先级,是否后台线程,是否存活,是否被中断。

14、Therad的常见操作: I)启动线程——把该线程放到就绪队列中,拥有争夺CPU的资格——start; Ii)通知一个线程停下来(中断线程)——建议不是强制——interrupt; Iii)等待一个线程停下来——join; Iiii)(废弃的方法)可以强制让线程停下来的办法,但不建议用了。

15、如何感受到通知? I) 如果正在sleep之类的操作调用,以interruptedException异常的形势被通知 II) 如果不是,则需要使用Thread. interrupted(更推荐)或者t.isInterrupted Iii)Thread. interrupted调用会重置中断标志位(即灯变暗) interruptedException异常抛出之后会重置中断标志位 原因:希望这次通知到此结束,不要影响到后续.

16、 1)Thread.currentThread()返回当前线程的引用——哪个线程中在执行这段代码,哪个线程就是当前代码; 2)Thread. Interrupted()通知停止; 3)Thread.sleep(毫秒)休眠x毫秒——当前线程放弃CPU,把状态修改(不在争抢CPU),给自己设置个闹钟,x毫秒之后,重新进入抢夺CPU的行列; Sleep的时间肯定>=x毫秒,有可能大于x毫秒; TimeUnit.SECONDS.sleep(秒); TimeUnit.HOUR.sleep(秒); 4)Thread.yield();主动放弃CPU,但保留争夺CPU的资格。从running到ready 5)isAlive();不是NEW和TERMIANATED都返回true。

17、线程状态的作用:JVM内部调度线程时的参考;程序员DEBUG时观察线程——jconsole工具。

18、线程有哪些状态及含义? New:线程对象刚被创建,没有抢CPU的资格 RUNNING有两层含义:ready(在就绪队列中——有抢CPU的资格)、running(抢到CPU了,已经在cpu上运行了) BLOCKED,TIMED_WAITING,WAITING都是表示该线程不具备抢CPU的资格。线程还活着只是暂时放弃抢CPU的资格。

19、线程之间的转移:BLOCKED,TIMED_WAITING,WAITING回来的时候都是先回到ready,再去抢夺CPU

20、线程安全的概念:多线程程序的运行结果可以保证100%的正确性,才能说是线程安全的,否则哪怕99%的情况下,结果正确,也不是线程安全。

21、因为线程在执行过程中有随机因素: I)什么时候从CPU切换下不确定 Ii)谁被选中切换上CPU不确定 进而导致程序的结果也是不确定的,即没有按照我们预期来,我们称之为:线程不安全。 反之:所谓的线程安全就是写代码能保证100%的返回期望的正确结果。

22、不是所有的多线程程序都会出现这种现象,出现两个随机现象的两个必要条件: I)多个线程之间操作的变量(资源)是共享的 Ii)多个线程之间对共享变量(资源)是有修改操作的。 只要以上条件缺少其一,那么这个多线程代码就是线程安全的(没有bug) 有很多情况下是天生线程安全的。

23、Java中的内存区域划分:程序计数器(PC),栈(本地方法栈,JVM虚拟机栈),堆,方法区,常量池。

24、栈的作用:表示运行方法的动态过程——主要保存的是栈帧。

25、Java中的参数传递只有值传递(值拷贝过程)——形参的改变不会影响实参(无论基本数据类型还是引用数据类型)。

26、哪些内存区域是共享的,哪些区域是私有的? 程序计数器(PC):每个线程私有的;每个线程需要记录他自己运行到哪里去了(nextPCValue)。 栈(无论本地方法栈还是JVM栈)每个线程私有的;每个线程当下执行的方法路径很可能不同。 以上两个是动态过程: 以下三个是数据存储: 堆,方法区,常量池:所有线程共享同一份。

27、变量有两种类型:一种是基本数据类型,一种是引用数据类型。变量类型无法决定该变量是否是线程之间共享的变量的形态:形态才是决定变量存放位置以及是否线程之间共享的因素。 形参,局部变量——存放在栈帧里的——他们是线程之间私有的; 属性——存放在对象——对象(不包括反射对象)存放在堆中——属性是线程之间共享的; 静态属性——在类中——类在方法区中——静态属性是线程之间共享的。




城市合伙人全球招募中:400-150-9800

参与线下宏伟蓝图,用业绩说话!
软件线索、软件需求,米鼠网帮你变现!
更灵活的合作模式(不限地域、不限金额、不限项目)
更高额的提成比例(提成是软件项目利润的80%)
利润的核算方式:
以平台公开招标的最低价中标价格为基准,剩下的为利润部分,如对平台的最低中标价格有异议,可以推荐供应商进行竞标。
义务:
1、作为城市合伙人,在该城市利用自身优势推广“米鼠网平台”,拓展甲 方所拥有的“米鼠网平台”实名认证用户和 VIP 用户
2、作为城市合伙人,在该城市利用自身优势推广“米鼠网商城”,并寻求该地域软件产品销售商,促成软件产品销售商委托甲方在“米鼠网商城”上代理销售软件产品销售商的软件产品的交易,并拓展软件产品采购用户促成与甲方的采购交易。



如有侵权请联系邮箱(service@misuland.com)

猜你喜欢

评论留言