并发的本质是什么?

简介: 并发的本质是什么?

并发的本质是什么?



进程是分配资源的基本单位,线程是调度的基本单位。每个线程有一组寄存器,堆栈,一个程序计数器。

并发的核心是如何处理好多线程的分工,同步和互斥的问题。

并发编程的本质是为了解决:可见性,原子性,有序性三大问题。

并发其实是利用多线程技术,在现代 CPU 的背景下,催生了并发编程的趋势,通过编程编程的形式可以将多核 CPU 的计算能力发挥到极致。


并发的优势


并发编程的优势:并发可以充分利用 CPU 计算能力,提升性能。


并发缺点


在高并发场景下,频繁的上下文切换会损耗性能。临界区线程全问题,线程容易产生死锁。

CPU 通过事件片来循环执行任务。当前任务执行一个时间片后切换到下一个任务,会在切换前保存上一个任务状态,方便切换回这个任务,可以加载这个任务的状态。

640.png


线程


  • 用户线程(User-Level Thread)
  • 内核线程(kernel-Level Thread)


640.png

用户线程


指不需要内核支持而在用户程序中实现的线程,不依赖操作系统核心,应用进程利用线程库提供创建,同步,调度和管理线程的函数控制用户线程。


内核线程


线程的管理操作都由操作系统内核完成。内核保存线程的状态和上下文信息,当一个线程执行了引起了阻塞系统调用时,内核可以调度该进程的其他线程执行,在多线程系统上,内核可以分派系统进程多个处理器运行。

640.png


Java 线程与系统内核线程

640.png


Java 创建线程


new java.lang.Thread().start(),使用JNI将一个native thread attach到JVM中针对 new java.lang.Thread().start()这种方式,只有调用start()方法的时候,才会真正的在JVM中去创建线程

主要的生命周期步骤有

  • 创建对应的JavaThread的instance
  • 创建对应的OSThread的instance
  • 创建实际的底层操作系统的native thread
  • 准备相应的JVM状态,比如ThreadLocal存储空间分配等
  • 底层的native thread开始运行,调用java.lang.Thread生成的Object的run()方法
  • 当java.lang.Thread生成的Object的run()方法执行完毕返回后,或者抛出异常终止后,终止native thread
  • 释放JVM相关的thread的资源,清除对应的JavaThread和OSThread
  • 针对JNI将一个native thread attach到JVM中,主要的步骤有
  • 通过JNI call AttachCurrentThread申请连接到执行的JVM实例


Java 线程的生命周期


640.png



相关文章
|
4月前
|
算法 安全 编译器
并发的三大特性
并发的三大特性
38 1
|
5月前
并发与并行的区别(详细介绍)
并发与并行的区别(详细介绍)
678 0
|
7月前
并发和并行以及他们的区别
并发:         并发指的是多个任务交替执行的能力,这些任务可能不是同时执行,而是通过快速切换在不同任务之间来实现“同时执行”的效果。在多核处理器上,多个线程可以真正同时执行,而在单核处理器上,线程之间通过时间片轮转实现并发。         所以当谈论并发的时候一定要加个单位时间,也就是说单位时间内并发量是多少?离开了单位时间其实是没有意义的。 并行:         并行指的是多个任务同时执行的能力,每个任务都在独立的CPU上执行。并行通常用于同时处理独立任务,这些任务可以同时执行,而不需要相互等待或协同工作。 两者区别:         关键区别在于并发强调任务在时间上交替执行
40 0
|
2月前
|
调度 数据库 计算机视觉
并行和并发的区别(详细)
并行和并发的区别(详细)
|
7月前
|
Java
并发三大特性
并发三大特性
20 0
|
10月前
|
存储 并行计算 安全
并发和并行的区别
并发和并行的区别
|
12月前
串行、并行和并发的区别
串行、并行和并发的区别
|
存储 编译器 调度
并发和并行有什么区别
并发和并行有什么区别
132 0
|
安全 调度 Windows
并发的必知概念
并发的必知概念
并发的必知概念
|
NoSQL Java 调度
并行与并发区别
并行与并发区别
123 0
并行与并发区别

相关实验场景

更多