双非本科准备秋招(14.2)—— 进程与线程

进程

        进程是运行着的程序,是程序在操作系统的一次执行过程,进程是操作系统分配资源的基本单位。

        启动一个java程序,操作系统就会创建一个java进程

        进程也可以看作一个程序的实例,大部分程序可以运行多个实例进程,比如记事本,有的程序只能启动一个实例进程,如果qq音乐。

线程

        线程可以理解为一个进程的执行实体,多个线程组成一个进程,是操作系统调度资源的基本单位

        一个线程就是一个指令流,是真正可以运行在cpu上的执行单元。

对比

  • 进程基本相互独立,线程存在进程之内。
  • 进程拥有共享的资源,供内部线程共享。
  • 进程通信:同一台计算机的进程通信,称为IPC(Inter-process communication);不同计算机通信需要经过网络,遵循例如HTTP的协议。
  • 线程通信:共享进程的内存,比如多个线程可以访问同一共享变量。
  • 线程更加轻量,线程上下文切换成本往往低于进程上下文切换。

并行与并发

        单核cpu,线程是串行的,但是任务调度器将cpu时间片分给不同线程。给人一种微观串行,宏观并行的感觉。

        线程轮流使用cpu,这就是并发(concurrent)

        并行(parallel):多核cpu,每个核都可以调度线程,这时线程是并行的。

下图中,即有并行(同一时刻,两个core调度不同的线程),也有并发(4个线程轮流地使用core)。

同步与异步

同步:需要等待结果返回,才能继续运行

异步:不需要等待结果返回,就能继续运行。多线程可以让方法变成异步。

例如如下代码就是异步的,主线程和新线程一起启动,主线程无需等待另一个线程结束就可以执行打印”do“。

  @Slf4j(topic = "c.Async")public class Async {public static void main(String[] args){new Thread(() -> {String s = "do it !!!";try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(s);}).start();​log.debug("do");}}

应用场景举例:

        例如项目中的视频文件格式转换,需要耗费大量时间,这时候就需要新开一个线程处理视频文件格式转换,避免阻塞了主线程。

提高效率

        多线程的目的是为了充分利用多核CPU。

        比如我们要执行三次计算,分别耗时10ms,11ms,12ms。如果我们可以开三个线程分别运行,那我们理论上的运行时间取决于最大用时,也就是12ms。

        但如果是单核cpu,串行用时10+11+12 = 33ms,如果这时开三个线程,时间肯定大于33ms,因为cpu是单核的,实际上还是在串行执行这些线程,还需要上下文切换的时间,更加耗时。

        所以,单核cpu下的多线程实际上并不会提高运行效率,而是可以再不同任务间切换,避免一个线程总占用cpu。

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

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

相关文章

基于springboot+vue的阿博图书馆管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

在Ubuntu安装开源数据库MySQL 8.0版本

文章目录 更新软件包列表安装MySQL服务器配置MySQL账号密码配置MySQL的统一字符启动MySQL服务允许远程连接Windows SSH连接Ubuntu推荐阅读 在Ubuntu 22.04上安装MySQL 8.0的步骤相对直接,可以使用APT包管理器从官方存储库中安装。 更新软件包列表 更新软件包列表&a…

说话人脸合成新框架NeRF-AD,使图像生成质量和嘴型同步提升

论文题目: NeRF-AD: Neural Radiance Field with Attention-based Disentanglement for Talking Face Synthesis 论文作者: Chongke Bi, Xiaoxing Liu, Zhilei Liu 导读:本文提出了一种新的说话人脸合成框架,该框架在NeRF中加入…

C语言递归与迭代并举:双重视角下的C语言阶乘计算实现

引言 计算一个正整数的阶乘是常见的数学问题。阶乘的定义为:n的阶乘(记作n!)是所有小于及等于n的正整数的乘积。例如,5的阶乘(5!)就是54321120。下面我们将通过一个使用递归方法实现阶乘的C语言代码示例&am…

图解Linux虚拟文件系统(VFS)之关系篇

目录 1.什么是虚拟文件系统? 2.Linux系统文件树 3.文件系统注册 4.文件系统挂载 4.1 索引挂载点 4.2 创建新文件系统挂载实例 4.3 新旧挂载实例对接 总结: 大家好,今天和大家探讨一下Linux虚拟文件系统,虚拟文件系统是我一…

人脸识别的多样化和稀疏关注对姿势变化和遮挡具有鲁棒性

DSA-Face: Diverse and Sparse Attentions for Face Recognition Robust to Pose Variation and Occlusion 一、创新点 1.提出了成对自我对比注意力来强制模型提取不同的局部特征; 2.设计注意力稀疏性损失是为了鼓励注意力图中的稀疏反应,阻止对分散注意…

LeetCode:141和142,环形链表之追及相遇和快慢指针的运用

这两个题是相关联的,主要做法为哈希和快慢指针,当然像博主我,不看解析只会O(n^2)的暴力遍历,太惨了,不过,快慢指针还是很好理解的,是一个追及的问题, 目录 …

基于STM32的DMA在外设数据交换中的应用案例

如何使用STM32的DMA在外设数据交换中实现高效的数据传输呢?下面,我将提供一个应用案例,涉及使用STM32的DMA在UART外设和内存之间进行数据传输的示例。 ✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进 ❤欢迎关…

【代码随想录】LC 1. 两数之和

文章目录 前言一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、时间复杂度3、代码详解 前言 本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记,如有侵权,立即删除。 一、题目 1、原题链接 1. 两数之和 2、题目描述 二、解题报告 1、思…

(6)Elastix图像配准:可视化配准工具

文章目录 前言一、配准工具1.1、基于Elastix的可视化配准工具1.1.1、elastix-napari:基于napari的Elastix图像配准1.1.2、SlicerElastix:基于3D slice的Elastix图像配准1.1.3、BIRDS:基于ImageJ的Elastix双通道图像配准 1.2、基于ITK开发的配…

input框前面名字长短不一时,让上下input框对齐方法

没设置之前 设置之后&#xff1a; 代码如下&#xff1a; <style>div{width: 500px;}label {display: block; /* 设置 label 元素为块级元素 */text-align: right; /* 设置文本右对齐 */margin-bottom: 10px; /* 设置标签之间的间距 */} </style> </head><…

springboot 文件差异化对比以及可视化展示

maven依赖 <!-- 文件内容对比--><dependency><groupId>io.github.java-diff-utils</groupId><artifactId>java-diff-utils</artifactId><version>4.11</version></dependency>创建Diff 工具类 package com.system.ut…