当前位置: 首页 > news >正文

双非本科准备秋招(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.lryc.cn/news/292645.html

相关文章:

  • 数据结构和算法笔记5:堆和优先队列
  • 第8章 SpringBoot任务管理
  • Qt5 基于OpenGL实现六轴机械臂三维仿真
  • 路由进阶
  • 分类预测 | Matlab实现SCN-Adaboost随机配置网络模型SCN的Adaboost数据分类预测/故障识别
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextPicker组件
  • linux中vim的操作
  • 《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第5章 决策树
  • 【C++11(一)】列表初始化and右值引用
  • 为什么SSL会握手失败?SSL握手失败原因及解决方案
  • STM32——智能小车
  • 开源:基于Vue3.3 + TS + Vant4 + Vite5 + Pinia + ViewPort适配..搭建的H5移动端开发模板
  • 缩略图保持加密(thumbnail-preserving encryption, TPE)的理论基础
  • nodejs+vue+mysql校园失物招领网站38tp1
  • GEDepth:Ground Embedding for Monocular Depth Estimation
  • 校园圈子论坛系统--APP小程序H5,前后端源码交付,支持二开!uniAPP+PHP书写!
  • VMware vCenter告警:vSphere UI运行状况警报
  • C# 引用同一个dll不同版本的程序集
  • 单机搭建hadoop环境(包括hdfs、yarn、hive)
  • LEETCODE 170. 交易逆序对的总数
  • 「HarmonyOS」EventHub事件通知详细使用方法
  • 为什么golang不支持可重入锁呢?
  • 聊一聊Tomcat的架构和运行流程,尽量通俗易懂一点
  • ModelArts加速识别,助力新零售电商业务功能的实现
  • Qt/C++音视频开发65-切换声卡/选择音频输出设备/播放到不同的声音设备/声卡下拉框
  • MySQL原理(一)架构组成之逻辑模块(1)组成
  • 一、cadence PDK 自学笔记-心法
  • 防御保护--NAT策略
  • 【C++】C++入门 — 指针空值nullptr
  • Vue3+Koa2实现图片上传(不再畏惧)