首页 > 系统相关 >Java并发(一)----进程、线程、并行、并发

Java并发(一)----进程、线程、并行、并发

时间:2023-04-10 20:57:48浏览次数:34  
标签:Java 并行 ---- 并发 线程 进程 时间 CPU

一、进程与线程

进程

  • 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的

  • 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。

  • 进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器等),也有的程序只能启动一个实例进程(例如网易云音乐、360 安全卫士等)

线程

  • 一个进程之内可以分为一到多个线程。

  • 一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给 CPU 执行

  • Java 中,线程作为最小调度单位,进程作为资源分配的最小单位。 在 windows 中进程是不活动的,只是作为线程的容器

二者对比

  • 进程基本上相互独立的,而线程存在于进程内,是进程的一个子集

  • 进程拥有共享的资源,如内存空间等,供其内部的线程共享

  • 进程间通信较为复杂

    • 同一台计算机的进程通信称为 IPC(Inter-process communication)

    • 不同计算机之间的进程通信,需要通过网络,并遵守共同的协议,例如 HTTP

  • 线程通信相对简单,因为它们共享进程内的内存,一个例子是多个线程可以访问同一个共享变量

  • 线程更轻量,线程上下文切换成本一般上要比进程上下文切换低

二、并行与并发

单核 cpu 下,线程实际还是 串行执行 的。操作系统中有一个组件叫做任务调度器,将 cpu 的时间片(windows 下时间片最小约为 15 毫秒)分给不同的线程使用,只是由于 cpu 在线程间(时间片很短)的切换非常快,人类感觉是 同时运行的 。总结为一句话就是:微观串行,宏观并行

一般会将这种 线程轮流使用 CPU 的做法称为并发,对应的英文单词为 concurrent

CPU 时间片 1 时间片 2 时间片 3 时间片 4
core 线程 1 线程 2 线程 3 线程 4

多核 cpu下,每个 核(core)都可以调度运行线程,这时候线程可以是并行的。对应的英文为parallel。在时间片1中,线程1与线程2可以同一时间执行。

CPU 时间片 1 时间片 2 时间片 3 时间片 4
core 1 线程 1 线程 1 线程 3 线程 3
core 2 线程 2 线程 4 线程 2 线程 4

引用 Rob Pike 的一段描述:

  • 并发(concurrent)是同一时间应对(dealing with)多件事情的能力

  • 并行(parallel)是同一时间动手做(doing)多件事情的能力

例子

  • 家庭主妇做饭、打扫卫生、给孩子喂奶,她一个人轮流交替做这多件事,这时就是并发

  • 家庭主妇雇了个保姆,她们一起这些事,这时既有并发,也有并行

    • 保姆做饭,主妇喂奶,并行

    • 保姆做饭、打扫卫生,并发

  • 雇了3个保姆,一个专做饭、一个专打扫卫生、一个专喂奶,互不干扰,这时是并行

  • 在实际的应用过程中一般既有并发也有并行。

 

标签:Java,并行,----,并发,线程,进程,时间,CPU
From: https://www.cnblogs.com/xiaoyh/p/16651175.html

相关文章

  • 今日报告
    总结--紧张刺激的一天代码时间(包括上课):7h代码量(行):318行博客数量(篇):3篇了解到的相关知识点:1、分页查询的相关知识2、超链接样式改变的步骤以及应用3、axios的后台的更正......
  • 使用benchmark比较各排序算法的性能
    #include<benchmark/benchmark.h>#include<algorithm>#include<deque>#include<iostream>#include<random>#include<vector>usingnamespacestd;staticconstint_num=10000;staticconstint_lrange=0;static......
  • POE供电
     一个完整的POE系统至少包括供电端设备(PSE,PowerSourcingEquipment)和受电端设备(PD,PowerDevice)两部分。     举例TL-SF1009PT是TP-LINK自主研发的非网管PoE交换机,8个百兆端口支持PoE+供电,符合IEEE802.3af/at标准,单端口PoE功率可达30W,整机PoE输出功率......
  • 直线光栅化-Bresenham算法
    直线光栅化-Bresenham算法Bresenham算法对于两个顶点\(P_{1}(x_{1},y_{1})\)和\(P_{2}(x_{2},y_{2})\)满足\(\Deltax=x_{2}-x_{1}>0\)且\(\Deltay=y_{2}-y_{1}>0\)。设两点确定的直线方程的斜率为\(k=\frac{\Deltay}{\Deltax}\)。当\(0<k<1\)时,从\(x\)轴开始......
  • 剑指offer38(Java)-字符串的排列(中等)
    题目:输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。 示例:输入:s="abc"输出:["abc","acb","bac","bca","cab","cba"] 限制:1<=s的长度<=8来源:力扣(LeetCode)链接:https://leetcode.cn/pr......
  • Collection接口和常用方法
    P1Collection接口和常用方法一、Collection接口实现类的特点publicinterfaceCollectionextendsIterableCollection实现子类可以存放多个元素,每个元素可以是Object。有些Collection的实现类,可以存放重复的元素,有些不可以。有些Collection的实现类,有些是有序的(如:List),有......
  • YApi——Swagger
    YApiYApi是高效、易用、功能强大的api管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护API,YApi还为用户提供了优秀的交互经验,开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。YApi让接口......
  • LINUX 下如何判断服务器是虚拟机,还是物理机
    要检查服务器是物理服务器还是虚拟服务器,最简单的检查方法是使用dmidecode命令。下面推荐几种常用操作。方法一#如果是物理系统,则应该看到制造商的名称,例如Dell,Lenovo等。[root@laocalhost~]#sudodmidecode-ssystem-manufacturerDellInc.#如果是虚拟系统,则应该看到类......
  • 课上测试-实现分页显示和模糊查询(代码部分)
    今天的软工课上,老师给我们布置了课堂小测试,要求我们做一个简单的科技政策查询系统,具体要能实现模糊查询和分页显示。这里展示我实现的代码。目前实现了基本功能,还有点小不完善,之后再改一改吧。Query.javapackagemain;importdao.Bean;importdatas.DB;importj......
  • git reset [--soft| --mixed| --hard] [commit]
    【参考】https://www.jianshu.com/p/c6927e80a01d【理解】--soft改变最轻,将已提交变成uncommit状态,工作区内容不变--mixed次之,将已提交变成unstage状态,工作区不变--hard最严重,全部撤回,工作区改变 执行gitreset--hard 后可使用gitreflog查看更改 ......