程序
程序:是静态的,JAVA代码编译后的有序代码的集合,是保存在硬盘上的。
进程
1.为什么有进程
因为最开始计算机只支持运行一个程序,但是随着计算机硬件的升级,比如说有了更多的资源,所以希望计算机同时完成多件事情,而且彼此之间互不影响。
2.什么是进程
通过CPU在一个资源集合上的一次动态处理过程。
3.进程的组成
内核态(资源):寄存器中指令(代码)的地址空间,文件和网络资源,这些是操作系统进行处理的,JAVA程序是无法直接操作硬件的,所以这部分的资源调度,JAVA程序是通过切换到内核态来完成的。
用户态(数据的处理):当程序获取到数据后,比如说TXT文件中的字符等,进行逻辑上的转换,这是用户代码完成的,这部分的操作成为用户态。
线程
1.为什么有线程
因为上面提到过进程的资源是互不影响的,所以在完成一些复杂程序的时候,资源的处理变得非常麻烦,比如说我们的游戏需要声音和画面,可以通过多个进程并发(单核)或者并行(多核)完成,但是进程间的资源是相互隔离的(独立的页表),需要通过资源的传递才可以完成,开销过大。
2.什么是线程
线程是可以共享进程资源的执行流程,也就是说进程中的用户态是运行在线程上的,线程=进程-共享资源。
3.线程的实现
–用户线程:用户空间实现,操作系统不知道的,调度,创建,销毁都是由用户态来完成的。
–内核线程:内核中实现,调度,创建,销毁都是由内核态完成的。
–轻量级进程:内核中实现,支持用户线程,每一个用户线程对应一个内核线程。
线程和进程的区别:
–进程之间的资源是独立的,线程是共享的。
–进程资源分配单位,线程是CPU调度单位。
–创建和释放线程时间比进程时间短。
总结:
JAVA中使用的轻量级进程,线程的创建和销毁是JAVA层面实现的用户线程,在windows和linux版本的JVM中,用户线程和内核线程一比一对应的,所以线程调度是由内核线程来实现的,也就是由操作系统来调度的。这样的调度方式需要切换到内核态,开销也很大,所以现在很多使用CAS等操作来代替sychornized保证数据的一致性。
标签:JAVA,什么,用户,调度,线程,内核,进程
来源: https://blog.csdn.net/weixin_42060779/article/details/110880934