首页 > 系统相关 >进程与线程

进程与线程

时间:2023-08-02 10:34:21浏览次数:29  
标签:操作系统 程序 线程 处理器 进程 执行

进程

进程就是一个程序的执行实例,也就是正在执行的程序,是操作系统资源分配的基本单位。
进程的概念主要有两点:

1. 进程是一个实体。每个进程都有独立的代码和数据空间(程序上下文),即自己的地址空间。    
2. 进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。

一个应用程序可以同时对应多个进程,即所谓的多进程服务。
比如下边 我打开了一个记事本(1个进程),打开了一个chrome并开了两个标签页(2个进程)。

线程

线程是cpu底层的处理能力, 是CPU调度和分派的基本单位 ,
线程可看做轻量级进程,同一类线程共享代码和数据空间(想想单线程的js),每个线程都有自己独立的运行栈和程序计数器。

单核CPU同一时间只能处理1个线程(任务),也就只能处理一件事情。
那如果我有双核的,那就不一样了,可以在同一时间做多件事情,这就是并发,举例如下

如果两个线程各自花费10s执行,那么在2处理器系统上,净时间为10s
如果两个线程各自花费10s执行,那么在1个处理器系统上,净时间为20s

进程与线程关系

进程是(操作系统)资源分配的最小单位,而线程是cpu调度的最小单位。

  1. 线程是进程的一部分,一个线程只能属于一个进程,一个进程可以有多个线程,但至少有一个线程。
  2. 操作系统在运行的时候会为每个进程分配不同的内存空间,而CPU则会进一步的为线程分配内存空间(即真正在处理器运行的是线程)
  3. 同一个进程的所有线程共享该进程所有资源。
  4. 线程在执行过程中需要协作同步,不同进程的线程间要利用消息通信的办法实现同步。
  5. (排除cpu能力限制的情况下)在操作系统中能同时运行多个进程(程序),在同一个进程(程序)中又能多个线程同时执行。
  6. 程序间的切换开销大,线程间切换开销小

标签:操作系统,程序,线程,处理器,进程,执行
From: https://www.cnblogs.com/dingshaohua/p/17599803.html

相关文章

  • linux c pid获取进程名 进程名获取pid
    原文Liunx中通过进程名查找进程PID可以通过pidof[进程名]来查找。反过来,相同通过PID查找进程名则没有相关命令。在linux根目录中,有一个/proc的VFS(虚拟文件系统),系统当前运行的所有进程都对应于该目录下的一个以进程PID命名的文件夹,其中存放进程运行的N多信息。其中有一个......
  • Python使用 - 多线程
    常见术语及用法 基本使用#定义线程类classMyThread(threading.Thread):def__init__(self):super(MyThread,self).__init__()#或threading.Thread.__init__(self)defrun(self)->None:tid=threading.currentThread().ident......
  • 线上问题排查--进程重启失败,最后发现是忘了cd
    背景我前面写了几篇文章,讲c3p0数据库连接池发生了连接泄露,但是随机出现,难以确定根因,最终呢,为了快速解决问题,我是先写了个shell脚本,脚本主要是检测服务的接口访问日志,看看过去的30s内是不是接口几乎都超时了,如果是的话,咱们就重启服务。然后把这个shell加入到了crontab里,每30s调度......
  • Flask的线程,携程与并发 (2)
    Flask的线程,携程与并发(2)pipreqs:-项目依赖pip3installpipreqs-生成依赖文件:pipreqs./-安装依赖文件:pip3install-rrequirements.txt函数和方法fromtypesimportMethodType,FunctionTypeclassFoo(object): deffetch(self): passprint(isinstance(......
  • Flask的线程,携程与并发
    Flask的线程,携程与并发并发编程#1操作系统发展史#2进程基础:操作系统上运行的程序,是资源分配的最小单位#3进程调度:时间片轮转法#4并发和并行#5同步,异步,阻塞,非阻塞#6python创建进程 -两种方式: -类继承:Process,重写run方法-Process(target=任务)......
  • CPU的几核几线程是什么意思?
    前言经常看到电脑硬件的配置参数上是这么标注cpu的是不是不太明白是什么意思?命名介绍每个cpu型号都有自己名字,比如上边举例的那款叫做i5-12600ki5指得是英特尔公司把自家cpu划分为三六九等,i3是低端、i5是中端、i7是高端、i9是至尊顶配。12指的是12代的处理器,其中后......
  • 什么是gil锁、python的垃圾回收机制是什么样的?解释为什么计算密集型用多进程,io密集型
    目录1什么是gil锁-全局解释器锁:gil锁的作用是什么?为什么要有gil锁?2python的垃圾回收机制是什么样的?-引用计数-标记清除-分代回收3解释为什么计算密集型用多进程,io密集型用多线程计算密集型任务:I/O密集型任务:总结:1什么是gil锁-全局解释器锁:它的本质就是一个大的互斥锁,它......
  • java 解决线程安全的两种方式(Synchornized和Lock)
    java解决线程安全的两种方式(Synchornized和Lock)原文链接:https://www.cnblogs.com/MrFugui/p/15610780.htmlsynchornized与lock的不同:synchronized机制在执行完相应的同步代码以后,自动的释放同步监视器lock需要手动的启动同步(Lock()),同时结束同步也需要使用手动的实现(unlock())......
  • Cluster机制剖析1——进程复制
    Forkfork()是类UNIX系统父进程复制子进程的系统调用,在Node里通过libuv实现了对不同平台(unix,linux,windows)的封装。引用百度百科的一段话来描述fork的特性:fork之后的子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,......
  • ThreadPoolExecutor来创建和执行线程池的基本步骤
    ThreadPoolExecutor是Java提供的一个线程池实现,它提供了对线程池的更灵活和精细的控制。可以通过ThreadPoolExecutor来管理和执行多个线程任务,以提高应用程序的性能和效率。下面是使用ThreadPoolExecutor来创建和执行线程池的基本步骤:创建一个ThreadPoolExecutor实例,可以通过Thread......