程序、进程、线程和协程的概念和区别以及多线程和单线程

本文介绍了程序、进程、线程和协程的基本概念及其区别。程序是静态的代码文件,而进程是程序的动态执行实例,拥有独立的资源。线程是程序执行的基本单位,同一进程中多个线程可共享资源。协程作为轻量级线程,是非抢占式的,允许多个任务在单线程中协同执行,提高程序效率。
摘要由CSDN通过智能技术生成

一、程序、进程、线程和协程概念

1、程序

        由代码编译成功得到的二进制文件。在Windows中就是.exe文件。程序只占用磁盘空间。程序其实就是存在操作系统上的一大堆指令(指令序列),是一个静态的概念,比如QQ放在电脑上,但是没有去执行它,那么它就是一个程序。

程序在内存中执行时主要包括三个部分:程序段、数据段、进程控制块(PCB)。

  • 程序段:用来存放程序中的指令本身。
  • 数据段:存放程序运行中需要的一些数据,比如变量、常量等。
  • PCB:是一个数据结构,用来描述进程的各种信息,比如程序代码的存储位置,它是进程存在的唯一标识。

2、进程

        运行起来的程序。进程需要占用系统资源(内存,CPU)。进程是最小的系统资源分配单位,只是给线程提供执行环境。 由于一个进程产生一个进程地址空间,且进程地址空间相互独立,一个进程死亡,其他进程不会受到影响。

        进程相比程序来讲,是一个动态的概念,当电脑上的程序放进内存中开始运行的时候,他就是一个进程。粗俗地来讲,进程就是正在执行的程序,是一个动态的,它拥有自己的独立的操作空间和资源,也就是说,进程是操作系统分配资源(比如内存)和调度的基本单位

3、线程

       在早期的操作系统中并没有线程的概念,进程是能拥有资源和独立运行的最小单位,也是程序执行的最小单位。它相当于一个进程里只有一个线程,进程本身就是线程。所以线程有时被称为轻量级进程(Lightweight Process,LWP)。

        后来,随着计算机的发展,对多个任务之间上下文切换的效率要求越来越高,就抽象出一个更小的概念——线程,一般一个进程会有多个(也可是一个)线程。

        进程在运行的时候,实际上是多个或者一个线程在运行。比如你开始运行了QQ,那么你可能打开了多个聊天框和多个人聊天,那么实际上这就是一个多线程并发执行的例子。也就是说,线程是运行的基本单位,但是和进程不同的是,线程它没有自主独立的操作空间和资源,因为一个进程往往有很多个线程并发进行,因此它们一般是共享自己本进程的资源和内存的。

线程的出现,使得一个进程可以有多个线程。

线程是最小的执行单位。CPU分配时间轮片的对象。

产生原因:提高争夺到CPU的概率。

线程和进程还有一个关系,就是一个进程至少拥有一个线程(主线程),但是可以拥有多个线程,也就是我们常说的多线程。
 

4、协程

协程:coroutine,也叫轻量级线程。 与传统的系统级线程和进程相比,协程最大的优势在于“轻量级”,可以轻松创建上万个而不会导致系统资源衰歇。而线程和进程通常很难超过1万个。一个线程中可以有任意多个协程,但某一时刻只能有一个协程在运行,多个协程分享该线程分配到的计算机资源。协程的本质其实也是一个线程

产生原因:提高程序执行的效率。(利用闲暇时间执行其他任务)

二、程序、进程、线程和协程的区别

1、程序和进程的区别

  • 程序是静态的,进程是动态的。进程是运行起来的程序。

2、进程与线程的区别

  • 调度:进程是资源管理的基本单位;线程是程序执行的基本单位。
  • 切换:线程上下文切换比进程上下文切换要快得多。
  • 拥有资源: 进程是拥有资源的一个独立单位;线程不拥有系统资源,但是可以访问隶属于进程的资源。
  • 系统开销: 创建或撤销进程时,系统都要为之分配或回收系统资源,如内存空间,I/O设备等,OS所付出的开销显著大于在创建或撤销线程时的开销,进程切换的开销也远大于线程切换的开销。

3、协程与线程的区别?

  • 线程和进程都是同步机制,而协程是异步机制。
  • 线程是抢占式,而协程是非抢占式的。需要用户释放使用权切换到其他协程,因此同一时间其实只有一个协程拥有运行权,相当于单线程的能力。
  • 一个线程可以有多个协程,一个进程也可以有多个协程。
  • 协程不被操作系统内核管理,而完全是由程序控制。线程是被分割的CPU资源,协程是组织好的代码流程,线程是协程的资源。但协程不会直接使用线程,协程直接利用的是执行器关联任意线程或线程池。
  • 协程能保留上一次调用时的状态。

三、单线程和多线程

        多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

        可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。

 

参考文章   参考文章

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值