进程跟线程的区别

news/2025/2/12 3:38:45/

进程跟线程的区别


文章目录

  • 进程跟线程的区别
  • 前言
  • 一.什么线程
  • 二.线程与进程的联系
  • 三.线程与进程有什么不同


前言

现代所有计算机都能同时做几件事情,当一个用户程序正在运行时,计算机还能同时读取磁盘,并向屏幕打印输出正文.在一个多道操作程序中,cpu由一道程序向另外一道程的切换,使每道程序运行几十个或者几百个ms.严格来说.在某一个瞬间,cpu只能运行一道程序.但在1秒钟期间,它也可能运行多道程序,这样就跟用户一种并行的错觉.有时候人们所说的伪并行就是cpu在多道程序之间来回快速切换,以此来区分它与真正的的硬件并行.因此我们就引入了进程和线程的一个概念


一.什么线程

线程(Thread)是计算机中的一种基本执行单位,是程序执行的最小单位。线程是进程中的一个实体,是CPU调度和分派的基本单位,一个进程可以由多个线程并行执行,每个线程都拥有独立的栈空间和程序计数器,但是它们共享进程的代码段、数据段和打开的文件等资源。


二.线程与进程的联系

与进程不同,线程是在进程中的执行路径,一个进程可以包含多个线程,线程之间可以共享进程资源,比如内存空间、文件句柄等,但每个线程都有自己的线程栈和程序计数器,使得线程之间的切换和调度相对于进程而言更为轻量级,开销也更小。

线程可以在同一个进程中同时执行不同的任务,也可以协同完成同一个任务。通过多线程编程,可以充分利用多核处理器的性能,提高程序的并发性和运行效率。

三.线程与进程有什么不同

我们可以从一下几个方法,去进行线程与进程的比较

资源分配:进程是系统进行资源分配和调度的一个独立单位,拥有自己的地址空间和系统资源(如内存、I/O等),而线程是进程的一部分,是处理器调度和执行的基本单位,它共享进程的地址空间和系统资源。

系统开销:由于线程共享进程的资源,所以相比进程来说,线程的创建和销毁的开销更小,切换也更快速,因此对系统的开销更小。

稳定性:由于线程共享进程的资源,所以一个线程出现问题很容易影响到整个进程,导致整个进程崩溃。而进程是相互独立的,一个进程出现问题并不会影响到其他进程的稳定性。

通信机制:由于线程共享进程的地址空间,所以它们之间的通信更加方便,不需要通过操作系统提供的进程间通信机制进行通信,而进程之间的通信必须要依靠操作系统提供的进程间通信机制(如管道、信号、共享内存等)。

并发性:由于线程是共享进程的资源,所以它们之间的并发性更高,可以在同一时间内完成更多的工作,提高系统的响应速度和处理能力。而进程之间的并发性比较低,因为它们之间需要通过操作系统提供的进程间通信机制来进行协调和同步。

总的来说,进程是资源分配和调度的基本单位,而线程是处理器调度和执行的基本单位。线程共享进程的资源,具有更小的系统开销和更高的并发性,但稳定性差;而进程相互独立,稳定性好,但开销大并发性低。

这里大家看到以上的绩点,纯属是个人观点,如果没有列举全的话,大家还望海涵.
我这里用简单明了的方法,小小总结一下:
1.进程 包含线程
2.进程有自己独立的内存空间和文件描述表,同一个进程的线程之间,共享一份地址空间和文件描述表.
3.进程是操作系统资源分配的基本单位,进程是操作系统调度的基本单位.
4.进程之间具有独立性,一个进程挂了,不会影响到别的进程,同一个进程里的多个线程之间,一个线程挂了,可能把整个进程带走,影响到其他进程


http://www.ppmy.cn/news/32785.html

相关文章

【HTML系列】前章 · HTML前序知识

写在前面 Hello大家好, 我是【麟-小白】,一位软件工程专业的学生,喜好计算机知识。希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正&#xff0…

L2-022 重排链表 L2-002 链表去重

给定一个单链表 L1 →L2→⋯→L n−1 →L n ,请编写程序将链表重新排列为 L n →L 1 →L n−1 →L 2 →⋯。例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3。 输入格式: 每个输入包含1个测试用例。每个测试用例第1行…

33个非常实用的JavaScript一行代码

一、日期处理 1. 检察日期是否有效 该方法用于检测给出的日期是否有效: const isDateValid (...val) > !Number.isNaN(new Date(...val).valueOf());isDateValid("December 17, 1995 03:24:00"); // true2. 计算两个日期之间的间隔 该方法用于计…

关于利用FFT分析时域信号幅相的思考与验证

引言 利用FFT分析/估计时域信号的幅度和相位,属于传统估计的范畴。估计的准确程度受频率分辨率的影响较大。如果被估计的目标频率等于频率分辨率的整数倍,信号的幅相估计都是最准确的。一旦目标频率不等于频率分辨率的整数倍,幅度估计值将会…

《Netty》从零开始学netty源码(八)之NioEventLoop.selector

目录java原生的WEPollSelectorImplnetty的SelectionKey容器SelectedSelectionKeySetnetty的SelectedSelectionKeySetSelectorSelectorTupleopenSelector每一个NioEventLoop配一个选择器Selector,在创建NioEventLoop的构造函数中会调用其自身方法openSelector获取sel…

java高级开发/技术经理面试经历

20230317 电讯盈科 面试问题: cp和ap的区别注册中心挂掉怎么处理,如何防止这种情况如何设计一套对外apijwt的实现加密方式商品秒杀相关问题gateway 网关有哪些功能 20230317 广州希音 面试问题: redis的数据结构,各种数据结构的实现原理mysql的索引…

Vite4 + Vue3 + vue-router4 动态路由

动态路由,基本上每一个项目都能接触到这个东西,通俗一点就是我们的菜单是根据后端接口返回的数据进行动态生成的。表面上是对菜单的一个展现处理,其实内部就是对router的一个数据处理。这样就可以根据角色权限或者一些业务上的需求&#xff0…

PHP中怎么使用

在 PHP 中,& 符号可以用来创建一个引用变量。引用变量实际上是原变量的别名,对引用变量的修改会反映在原变量上。使用引用变量可以节省内存,避免复制大量的数据。 下面是一个示例,演示如何使用 & 创建引用变量: phpCopy code $a = 1; $b = &$a; // 创建 $a…