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

进程和线程( Process and Thread)

目录

一、操作系统(Operating System)

 操作系统的定位

二、 什么是进程/任务(Process/Task)

1.进程控制块抽象(PCB Process Control Block)

2.PCB中重要的属性

 3.并发编程

 三、线程(Thread)

1. 线程是什么

2、为啥要有线程

三、进程和线程的区别

四、Java 的线程 和 操作系统线程 的关系


一、操作系统(Operating System

      操作系统是一组做计算机资源管理的软件的统称。目前常见的操作系统有:Windows系列、Unix系列、 Linux系列、OSX系列、Android系列、iOS系列、鸿蒙

 操作系统的定位

         

操作系统由两个基本功能:
  1. 防止硬件被时空的应用程序滥用;
  2.  向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备。

二、 什么是进程/任务(Process/Task

        进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程; 同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。

1.进程控制块抽象(PCB Process Control Block)

    计算机内部要管理任何现实事物,都需要将其抽象成一组有关联的、互为一体的数据。在 Java 语言中, 我们可以通过类/对象来描述这一特征。

2.PCB中重要的属性

       这样,每一个 PCB 对象,就代表着一个实实在在运行着的程序,也就是进程。

        操作系统再通过这种数据结构,例如线性表、搜索树等将 PCB 对象组织起来,方便管理时进行增删查改 (CURD)的操作。

 3.并发编程

        (1)若只有一个CPU核心,则采用轮转调度的方式,依次执行多个进程,宏观上“同时进行”,微观上“先后进行”,称为“并发”。

        (2)若有多个CPU核心,则同时执行,称为“并行”。 

 三、线程(Thread)

1. 线程是什么

        一个线程就是一个 "执行流". 每个线程之间都可以按照顺讯执行自己的代码. 多个线程之间 "同时" 执行 着多份代码。

2、为啥要有线程

首先, "并发编程" 成为 "刚需".

       单核 CPU 的发展遇到了瓶颈. 要想提高算力, 就需要多核 CPU. 而并发编程能更充分利用多核 CPU 资源. 有些任务场景需要 "等待 IO", 为了让等待 IO 的时间能够去做一些其他的工作, 也需要用到并发编程.

其次, 虽然多进程也能实现 并发编程, 但是线程比进程更轻量.

  1.   创建线程比创建进程更快.
  2.   销毁线程比销毁进程更快.
  3.    调度线程比调度进程更快.

最后, 线程虽然比进程轻量, 但是人们还不满足, 于是又有了 "线程池"(ThreadPool) "协程"

(Coroutine)

三、进程和线程的区别

  1. 进程是包含线程的. 每个进程至少有一个线程存在,即主线程。
  2. 进程和进程之间不共享内存空间. 同一个进程的线程之间共享同一个内存空间,(创建新的线程不需要开辟资源空间
  3. 进程是系统分配资源的最小单位,线程是系统调度的最小单位。
  4. 都可以实现“并发编程”,线程更为高效。
  5. 进程之间是相互独立,线程之前可能相互影响(线程安全性,线程异常)。

四、Java 的线程 和 操作系统线程 的关系

        线程是操作系统中的概念. 操作系统内核实现了线程这样的机制, 并且对用户层提供了一些 API 供用户使用(例如 Linux pthread ). Java 标准库中 Thread 类可以视为是对操作系统提供的 API 进行了进一步的抽象和封装.类似(JDBC).

                         

        结语:进程和线程的相关分享到这里就结束了,希望对大家的学习会有帮助,如果大家有什么问题或者不同的见解,欢迎大家评论区的留言, 感谢支持 


http://www.kler.cn/a/137120.html

相关文章:

  • 【day11】面向对象编程进阶(继承)
  • 【Windows版】opencv 和opencv_contrib配置
  • 2014年IMO第4题
  • android studio更改应用图片,和应用名字。
  • mysql的事务控制和数据库的备份和恢复
  • 常见的哈希函数构造方法
  • python -opencv形态学操作
  • Codeforces Round 910 (Div. 2) --- B-E 补题记录
  • 1.0 Zookeeper 教程
  • 用二维码进行人员管理,人员信息一目了然
  • 深度剖析倍增算法求解最近公共祖先(LCA)的细枝末节
  • 使用DHorse发布SpringBoot项目到K8S
  • Flutter打包iOS过程中pod访问github失败
  • # 学习 Prolog 和 离散逻辑的16个等价公式:一趟有趣的逻辑之旅
  • [C++11]可变参数模板和参数包展开
  • 打破传统束缚,释放服务潜能:本地生活服务商聚合系统引领行业新风向!
  • 2013年12月13日 Go生态洞察:Go在App Engine上的工具、测试和并发
  • SpringBoot 集成Sa-Token 一个轻量级Java权限认证框架,让鉴权变得简单、优雅!
  • C++11的unique_ptr独占的智能指针
  • 同为科技(TOWE)工业连接器:保障高效、可靠、安全的电气连接
  • 【报错记录】解决使用Kotlin写的SpringBoot项目使用Aspect切面无法生效的问题
  • axios的封装之axios是基于什么封装的?
  • Web 自动化神器 TestCafe(二)—元素定位篇
  • 七大查找算法
  • 【图数据库实战】gremlin语法
  • c# IEnumerable--扩展方法