java多线程-扩展知识一:进程线程、并发并行、同步异步

1、进程

        进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

  • 狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。
  • 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

特点

动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。

并发性:任何进程都可以同其他进程一起并发执行

独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;

异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进

结构特征:进程由程序、数据和进程控制块三部分组成。

多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。

2、线程

        线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。

        线程是独立调度和分派的基本单位。线程可以为操作系统内核调度的内核线程,如Win32线程;由用户进程自行调度的用户线程,如Linux平台的POSIX Thread;或者由内核与用户进程,如Windows 7的线程,进行混合调度。

        同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)。

        一个进程可以有很多线程,每条线程并行执行不同的任务。

        在多核或多CPU,或支持Hyper-threading的CPU上使用多线程程序设计的好处是显而易见,即提高了程序的执行吞吐率。在单CPU单核的计算机上,使用多线程技术,也可以把进程中负责I/O处理、人机交互而常被阻塞的部分与密集计算的部分分开来执行,编写专门的workhorse线程执行密集计算,从而提高了程序的执行效率。

特点

        在多线程OS中,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位,是花费最小开销的实体。线程具有以下属性。
        1)轻型实体
线程中的实体基本上不拥有系统资源,只是有一点必不可少的、能保证独立运行的资源。
线程的实体包括程序、数据和TCB。线程是动态概念,它的动态特性由线程控制块TCB(Thread Control Block)描述。TCB包括以下信息:
(1)线程状态。
(2)当线程不运行时,被保存的现场资源。
(3)一组执行堆栈。
(4)存放每个线程的局部变量主存区。
(5)访问同一个进程中的主存和其它资源。
用于指示被执行指令序列的程序计数器、保留局部变量、少数状态参数和返回地址等的一组寄存器和堆栈。
        2)独立调度和分派的基本单位。
在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。由于线程很“轻”,故线程的切换非常迅速且开销小(在同一进程中的)。
        3)可并发执行。
在一个进程中的多个线程之间,可以并发执行,甚至允许在一个进程中所有线程都能并发执行;同样,不同进程中的线程也能并发执行,充分利用和发挥了处理机与外围设备并行工作的能力。
        4)共享进程资源。
在同一进程中的各个线程,都可以共享该进程所拥有的资源,这首先表现在:所有线程都具有相同的地址空间(进程的地址空间),这意味着,线程可以访问该地址空间的每一个虚地址;此外,还可以访问进程所拥有的已打开文件、定时器、信号量机构等。由于同一个进程内的线程共享内存和文件,所以线程之间互相通信不必调用内核。

进程与线程的区别

​1)地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。

2)通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。

3)调度和切换:线程上下文切换比进程上下文切换要快得多。

4)在多线程OS中,进程不是一个可执行的实体。

3、并发

        并发的概念:进程中的线程是由CPU负责调度执行的,但CPU能同时处理线程的数量有限,为了保证全部线程都能往前执行,CPU会轮询为系统的每个线程服务,由于CPU切换的速度很快,给我们的感觉这些线程在同时执行,这就是并发。

4、并行

        并行的概念:在同一个时刻上,同时有多个线程在CPU调度执行。

并发与并行的区别

一、处理任务不同

并发(Concurrent)
并发是一个CPU处理器同时处理多个线程任务。(宏观上是同时处理多个任务,微观上其实是CPU在多个线程之间快速的交替执行CPU把运行时间划分成若干个(微小)时间段,公平的分配给各个线程执行,在一个时间段的线程运行时,其他线程处于挂起状态,这种就称之为并发。)

并行(parallel)
并行是多个CPU处理器同时处理多个线程任务。(当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这就被称之为并行。)

二、存在不同

并发(Concurrent)
并发可以在一个CPU处理器和多个CPU处理器系统中都存在。(多个CPU处理器系统其中的一个CPU也可以进行并发操作)

并行(parallel)
并行在多个CPU处理器系统存在。

三、CPU资源不同

并发(Concurrent)
并发过程中,线程之间会去抢占CPU资源,轮流使用。(其实CPU会多个各个线程公平的分配时间片和进行执行。)

并行(parallel)
并行过程中,线程间不会抢占CPU资源。(因为是多个CPU处理器,各做各的。)

5、同步

        同步是指一个进程在执行某个请求的时候,如果该请求需要一段时间才能返回信息,那么这个进程会一直等待下去,直到收到返回信息才继续执行下去。

6、异步

        异步是指进程不需要一直等待下去,而是继续执行下面的操作,不管其他进程的状态,当有信息返回的时候会通知进程进行处理,这样就可以提高执行的效率了,即异步是我们发出的一个请求,该请求会在后台自动发出并获取数据,然后对数据进行处理,在此过程中,我们可以继续做其他操作,不管它怎么发出请求,不关心它怎么处理数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/178243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云计算——ACA学习 阿里云云计算服务概述

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号:网络豆云计算学堂 座右铭:低头赶路,敬事如仪 个人主页: 网络豆的主页​​​​​ 目录 写在前面 前期回顾 本期介绍 前言了解 一…

QCheckBox通过qss实现状态切换显示不同图标

QString qss "QCheckBox::indicator:unchecked{ \image:url(:/resources/status_close.png); \} \QCheckBox::indicator:checked { \image: url(:/resources/status_open.png); \}";ui->checkBox->setStyleSheet(qss);ui->checkBox->setChecked(true);

【领域驱动设计 学习目标及大纲】从CRUD到架构设计

从2018年至今,已工作了5年有余,回望这5年的工作历程,虽然一直在学习、一直在积累,但其实都在术的层面上停留,也就是具体的技术点。这5年多的时间里其实也不是没有窥道的想法: 一次是2018年刚工作的时候&am…

FPGA模块——AD高速转换模块(并行输出转换的数据)

FPGA模块——AD高速转换模块(并行输出转换的数据) (1)AD9280/3PA9280芯片(2)代码 (1)AD9280/3PA9280芯片 AD9280/3PA9280芯片的引脚功能: 工作电压2.7到5.5v 数据对应&a…

采购申请的库存地点和MRP2的库存地点的关系

F类材料的采购申请的库存地点,带外部采购申请仓储地点 X类材料的采购申请的库存地点,从MRP2的生产仓储地点自动带到计划订单再到生产工单再到采购申请。

linux线程详解

线程 c版本1、线程概述2、创建线程3、线程退出4、线程回收使用子线程栈使用全局变量使用主线程栈 5、线程分离6、其他线程函数线程取消 6.2 线程ID比较 C版本1、构造函数2、公共成员函数2.1 get_id()2.2 join()2.3 detach()2.4 joinable()2.5 operator() 3、静态函数4、C线程命…

MSTP实验

目录 一、实验拓扑 二、实验要求 三、实验步骤 1、创建vlan 2、创建端口组,放通vlan 3、配置MSTP 4、配置主备奋根 一、实验拓扑 二、实验要求 1、所有交换机上创建vlan10,vlan20,vlan30和vlan40 2、所有交换机之间的端口配置为Trunk…

滑动窗口 -(LeetCode 209. 长度最小的子数组、904. 水果成篮)

跟着代码随想录完成了 leetcode 209.长度最小的子数组,学习到了滑动窗口的思想。于是做了904题。 题目意思是,遍历数组,找到包含两种元素的最长子串(字串就包含“连续”之意),返回其长度。因此可以利用滑动数组的思想。 想法过程…

Redis(二):常见数据类型:String 和 哈希

引言 Redis 提供了 5 种数据结构,理解每种数据结构的特点对于 Redis 开发运维⾮常重要,同时掌握每 种数据结构的常⻅命令,会在使⽤ Redis 的时候做到游刃有余。 Redis 的命令有上百种,我们不可能全部死记硬背下来,但是…

vue3---自定义插件注册全局对象

① 在src/components文件夹下创建index.ts:用于注册components文件夹下全部的全局组件 // 引入项目中的全部全局组件 import SvgIcon from ./SvgIcon/index.vue import Pagination from ./Pagination/index.vue// 定义全局组件对象:用于存放所有要引入的…

【小白进阶】Linux 调试大法——gdb

初衷 gdb调试是每一个后端开发工程师所必备的技能,我们工作总是会用gdb协助我们去分析和调试问题。但是大部分同学的技能仅停留在最基础的查看问题。即gdb program -->r --> 问题复现 --> bt 查看源码中的哪一行出现了错误。再稍微熟练点的,可能…

配置ssh 免密登录 还是要密码才能登录

确认公钥已经发送到目标服务器 ssh-copy-id 目标ip文件权限验证(id_rsa,id_rsa.pub,authorized_keys,known_hosts) -rw------- #authorized_keys -rw------- #id_rsa -rw-r--r-- #id_rsa.pub -rw-r--r-- #known_hosts.ssh目录权限验证 确…

YoloV5改进策略:RefConv打造轻量化YoloV5利器

文章目录 摘要论文:《RefConv: 重参数化的重聚焦卷积》1、简介2、相关研究2.1、用于更好性能的架构设计2.2、结构重参数化2.3、权重重参数化方法3、重参数化的重聚焦卷积3.1、深度RefConv3.2、普通的RefConv3.3、重聚焦学习4、实验4.1、在ImageNet上的性能评估4.2、与其他重参…

创建对象的方法及一些方法

一、字面量 {} let obj {a:1,b:2} // obj.alet obj1 {a-b:3} //obj1[a-b]let obj2 {1:2,2:3} //obj2[1]//2let s1 Symbol(); let s2 Symbol(); var person { [s1]: "Lily", [s2]: 18, gender: "female" }; console.log(person[s2]); // 输出 18 二…

抖音视频如何无水印下载,怎么批量保存主页所有视频没水印?

现在最火的短视频平台莫过于抖音,当我们刷到一个视频想下载下来怎么办?我们知道可以通过保存到相册的方式下载,但用这种方法下载的视频带有水印,而且有些视频不能保存到相册(这是视频作者设置了禁止下载)。…

Unity 关于SpriteRenderer 和正交相机缩放

float oldWidth 750f;float oldHeight 1334f;float newWidth Screen.width;float newHeight Screen.height;float oldAspect oldWidth / oldHeight;float newAspect newWidth / newHeight;//水平方向缩放float horizontalCompressionRatio newAspect / oldAspect;//垂直…

IDEA插件推荐

今天给大家推荐一款IDEA插件:Apipost-Helper-2.0,支持三大功能:写完代码IDEA内一键生成API文档;写完代码IDEA内一键调试;生成API目录树,双击即可快速定位API定义的代码…非常好用!而且完全免费&…

SELinux零知识学习三十五、SELinux策略语言之角色和用户(6)

接前一篇文章:SELinux零知识学习三十四、SELinux策略语言之角色和用户(5) 三、SELinux策略语言之角色和用户 SELinux提供了一种依赖于类型强制(类型增强,TE)的基于角色的访问控制(Role-Based Access Control),角色用于组域类型和限制域类型与用户之间的关系,SELinux…

找免费4K高清图片素材,就上这6个网站

使用图片素材怕侵权?那就上这6个网站,免费下载,4K高清无水印,赶紧收藏起来~ 1、菜鸟图库 https://www.sucai999.com/pic.html?vNTYxMjky 一个很大的素材库,站内主要还是以设计素材为主,像图片素材就有上百…

免费SSL证书服务——加密通信,零成本体验

你的网站是否安全无忧?我们为你提供免费SSL证书服务,让你的用户数据和信息传输更安全可靠。 安全保障: 全面升级你的网站安全性,通过SSL加密技术,确保用户数据传输隐私无忧。 零成本: 免费SSL证书服务&…