进程与线程

进程与线程,第1张

进程与线程

进程是系统分配资源的基本单位,线程是调度cpu的基本单位,一个进程至少包含一个执行线程,线程寄生在进程之中。每个线程都有一个程序计数器(记录要执行的下一条指令),一组寄存器(保存当前线程的的工作变量),堆栈(记录执行历史,其中每一帧保存了一个已经调用但未返回的过程)

线程分为两类
  • 用户级线程(ULT),cpu权限级别ring3普通用户可 *** 作
  • 内核级线程(KLT),cpu权限级别ring0才可 *** 作
用户空间划分
  • 内核空间,KLT

系统核心跑在内核空间,ring0才有权限创建线程

  • 用户空间,ULT

进程(JVM虚拟机,ps,word等)跑在用户空间,通过交互接口来跑内核空间的线程。只要主进程进行切换会发生阻塞。

volatile

        解决了并发编程的可见性

JMM(java内存模型)

                工作内存 = 虚拟机栈

                主内存 = 方法区 + 堆(jdk7及之前,静态属性在方法区),主内存 = 堆(jdk1.8及以后)

JVM(虚拟机内存模型) 指令重排
  • 一种现象,而非一种动作
  • cpu为了提升效率其实是乱序执行代码,优点性能高
  • 什么样代码会乱序执行?as-if-serial语义(乱序执行的一种约束),所有的 *** 作可以为了优化重新排序,但是必须保重排序后结果不能改变

        Java层面:

                没有发生重排

        Hotspot层面:

                发生了重排,提高cpu利用率,GCC编译优化(默认O2级优化):优化无效代码,进行简单运算,指令乱排序

DCL为什么加volatile?

DCL:双重检查,是一种单例模式,加不加都没问题

屏障:

        内存屏障

        编译屏障

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/721945.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存