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

讲一下线程和进程的区别和联系?

link1,link2

进程

程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器等),也有的程序只能启动一个实例进程(例如网易云音乐、360 安全卫士等)

线程

一个进程之内可以分为一到多个线程。一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给 CPU 执行Java 中,线程作为最小调度单位,进程作为资源分配的最小单位。 在 windows 中进程是不活动的,只是作为线程的容器。

  1. 操作系统中的一个“执行中的程序”就是进程,它是操作系统资源分配的最小的单位。而线程是进程的一个子集它是CPU调度和执行的最小单位

  2. 线程相对进程更轻量,特别是上下文切换,进程要比线程消耗更多的计算机资源。

    • 进程切换时,涉及到当前进程的CPU环境的保存和新被调度运行进程的CPU环境的设置;
    • 线程切换时,仅需要保存和设置少量的寄存器内容,不涉及存储管理方面的操作。
  3. 数据共享方面,同一进程下不同线程间数据很易共享,不同进程的线程间数据很难共享

    • 线程通信相对简单,因为它们共享进程内的内存
    • 进程间通信较为复杂,同一台计算机的进程通信称为 IPC(Inter-process communication),不同计算机之间的进程通信,需要通过网络,并遵守共同的协议,例如 HTTP

【拓展】什么是协程?

协程,是一种比线程更加轻量级的存在,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)。这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。

相关文章:

  • 正则
  • 讲一下线程状态并且解释一下?
  • windows 和 linux ssh互连
  • 【代码规范】
  • 【程序员眼中的统计学(12)】相关与回归:我的线条如何? (转)
  • 讲一下进程间通讯方式?
  • Docker的文件系统
  • 信号和信号量有什么区别?
  • 进程的调度算法有哪些?
  • ORA-00604 ORA-14452 ORA-20783
  • 线程同步的四种方式
  • 2015年小结
  • [<死锁专题>]
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 你知道那些常用的设计模式?
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • CSS 提示工具(Tooltip)
  •  D - 粉碎叛乱F - 其他起义
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JAVA并发编程--1.基础概念
  • js对象的深浅拷贝
  • Octave 入门
  • Python十分钟制作属于你自己的个性logo
  • Sass Day-01
  • Spring-boot 启动时碰到的错误
  • 编写符合Python风格的对象
  • 从伪并行的 Python 多线程说起
  • 构造函数(constructor)与原型链(prototype)关系
  • 关于for循环的简单归纳
  • 关于字符编码你应该知道的事情
  • 简单易用的leetcode开发测试工具(npm)
  • 解决iview多表头动态更改列元素发生的错误
  • 开发基于以太坊智能合约的DApp
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 一份游戏开发学习路线
  • 怎么将电脑中的声音录制成WAV格式
  • Prometheus VS InfluxDB
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​油烟净化器电源安全,保障健康餐饮生活
  • !!java web学习笔记(一到五)
  • # Apache SeaTunnel 究竟是什么?
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • # 数据结构
  • $(selector).each()和$.each()的区别
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)程序员疫苗:代码注入
  • (转)创业的注意事项
  • (转)大道至简,职场上做人做事做管理