精华内容
下载资源
问答
  • 进程和线程的概念、区别及进程线程间通信

    千次阅读 多人点赞 2020-08-02 16:24:25
    进程与线程的概念,以及为什么要有进程线程,其中有什么区别,他们各自又是怎么同步的? 1. 基本概念: 进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发; 线程是进程的子...

    进程与线程的概念,以及为什么要有进程线程,其中有什么区别,他们各自又是怎么同步的?

    1. 基本概念:

    进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发

    线程是进程的子任务,是CPU调度和分派的基本单位用于保证程序的实时性,实现进程内部的并发;线程是操作系统可识别的最小执行和调度单位。每个线程都独自占用一个虚拟处理器:独自的寄存器组指令计数器和处理器状态。每个线程完成不同的任务,但是共享同一地址空间(也就是同样的动态内存,映射文件,目标代码等等),打开的文件队列和其他内核资源

    2. 区别:
    1. 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程依赖于进程而存在。

    2. 进程在执行过程中拥有独立的内存单元,而多个线程共享进程的内存。(资源分配给进程,同一进程的所有线程共享该进程的所有资源。同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。)

    3. 进程是资源分配的最小单位,线程是CPU调度的最小单位

    4. 系统开销: 由于在创建或撤消进程时,系统都要为之分配或回收资源,如内存空间、I/o设备等。因此,操作系统所付出的开销将显著地大于在创建或撤消线程时的开销。类似地,在进行进程切换时,涉及到整个当前进程CPU环境的保存以及新被调度运行的进程的CPU环境的设置。而线程切换只须保存和设置少量寄存器的内容,并不涉及存储器管理方面的操作。可见,进程切换的开销也远大于线程切换的开销

    5. 通信:由于同一进程中的多个线程具有相同的地址空间,致使它们之间的同步和通信的实现,也变得比较容易。进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。在有的系统中,线程的切换、同步和通信都无须操作系统内核的干预

    6. 进程编程调试简单可靠性高,但是创建销毁开销大;线程正相反,开销小,切换速度快,但是编程调试相对复杂

    7. 进程间不会相互影响 ;线程一个线程挂掉将导致整个进程挂掉

    8. 进程适应于多核、多机分布;线程适用于多核

    进程间通信的方式:

    进程间通信主要包括管道、系统IPC(包括消息队列、信号量、信号、共享内存等)、以及套接字socket

    1.管道:

    管道主要包括匿名管道和命名管道:管道可用于具有亲缘关系的父子进程间的通信,命名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信

    • 1.1 匿名管道PIPE
    1. 它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端
    2. 只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)
    3. 它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。
    • 1.2 命名管道FIFO:
    1. FIFO可以在无关的进程之间交换数据
    2. FIFO有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中
    2. 系统IPC:
    • 2.1 消息队列
      消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标记。 (消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等特点)具有写权限得进程可以按照一定得规则向消息队列中添加新信息;对消息队列有读权限得进程则可以从消息队列中读取信息;

    特点:

    1. 消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。
    2. 消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。
    3. 消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。
    • 2.2 信号量semaphore
      信号量(semaphore)与已经介绍过的 IPC 结构不同,它是一个计数器,可以用来控制多个进程对共享资源的访问。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。

    特点:

    1. 信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。
    2. 信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。
    3. 每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数
    4. 支持信号量组
    2.3 信号signal

    信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

    2.4 共享内存(Shared Memory)

    它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等

    特点:

    1. 共享内存是最快的一种IPC,因为进程是直接对内存进行存取
    2. 因为多个进程可以同时操作,所以需要进行同步
    3. 信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问
    3.套接字SOCKET:

    socket也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同主机之间的进程通信。

    • 线程间通信的方式:
      临界区:通过多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问;
      互斥量Synchronized/Lock:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问
      信号量Semphare:为控制具有有限数量的用户资源而设计的,它允许多个线程在同一时刻去访问同一个资源,但一般需要限制同一时刻访问此资源的最大线程数目。
      事件(信号),Wait/Notify:通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作进程间通信的方式:
      进程间通信主要包括管道、系统IPC(包括消息队列、信号量、信号、共享内存等)、以及套接字socket。
    展开全文
  • 进程 线程 协程 详细讲解

    万次阅读 2020-06-12 09:57:51
    进程时分配资源的单位 线程是调度的基本单位 多核CPU下,各个线程也可以分派到...内存地址空间资源是独立,减少进程的开销,引入了线程,不同进程线程切换会导致切换 引入 cpu变态 会涉及资源消耗 ...

    进程

    第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程

    进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单元。

    进程的特征

    1. 动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
    2. 并发性:任何进程都可以同其他进程一起并发执行
    3. 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
    4. 异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进

    结构特征

    进程由程序、数据和进程控制块三部分组成。

    线程

    最直接的理解就是“轻量级进程”,它是一个基本的CPU执行单元。

    多核CPU下,各个线程也可以分派到不同的CPU上并行执行,也是程序执行流的最小单元,由线程ID,程序计数器,寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,但它可以和同属一个进程的其他线程共享进程所拥有的系统资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的互相制约,导致线程在运行中呈现间断性。

    线程又分为:用户级线程和内核级线程

     

    引入线程之后,进程是资源分配的基本单位。而线程几乎不拥有资源,只拥有极少量的资源(线程控制块TCB,寄存器信息,堆栈等),线程是调度的基本单元

    🤔思考:进程也是独立的可并发等特性,为什么还要引入线程呢?

    进程地址空间资源时独立的,在进行切换时需要保存/恢复进程运行时环境,还需要切换内存地址空间(更新块表,更新缓存),开销很大,引入线程的最主要原因就是为了降低切换时候的消耗(注:线程切换也有消耗,线程的运行时环境等信息)

    另外进程间通信必须请求操作系统服务(CPU需要切换到核心态),开销大(注:不同进程的线程间通信,也需要请求操作系统)

     

     协程

    协程不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用

    思考🤔:为什么要引入协程?线程之间是如何进行协作的呢?

    最经典的例子就是生产者/消费者模式

    若干个生产者线程向队列中写入数据,若干个消费者线程从队列中消费数据。

    🤔思考:生产者/消费者模式确实能实现线程之间的协作,但是却并不是一个高性能的实现。为什么性能不高呢?原因如下:

    1. 涉及到同步锁。
    2. 涉及到线程阻塞状态和可运行状态之间的切换。
    3. 涉及到线程上下文的切换。

    以上涉及到的任何一点,都是非常耗费性能的操作。

    最重要的是,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行,操作系统运行分为内核态和用户态,切换的时候也会涉及资源消耗)。

    这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。

    既然协程这么好,它到底是怎么来使用的呢?

    由于Java的原生语法中并没有实现协程(某些开源框架实现了协程,但是很少被使用),所以我们来看一看python当中对协程的实现案例,同样以生产者消费者模式为例:

    这段代码十分简单,即使没用过python的小伙伴应该也能基本看懂。

    代码中创建了一个叫做consumer的协程,并且在主线程中生产数据,协程中消费数据。

    其中 yield 是python当中的语法。当协程执行到yield关键字时,会暂停在那一行,等到主线程调用send方法发送了数据,协程才会接到数据继续执行。

    但是,yield让协程暂停,和线程的阻塞是有本质区别的。协程的暂停完全由程序控制,线程的阻塞状态是由操作系统内核来进行切换。

    因此,协程的开销远远小于线程的开销。

    参考

    百度百科

    什么是协程

     

     

    展开全文
  • 进程线程详解

    千次阅读 多人点赞 2018-10-11 09:44:14
    进程线程的详解 在面试中很喜欢问的一个问题就是: 进程线程的区别? 进程是资源分配的最小单位,线程是程序执行的最小单位。 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立...

    进程和线程的详解


    在面试中很喜欢问的一个问题就是:
    进程和线程的区别?

    • 进程是资源分配的最小单位,线程是程序执行的最小单位。

    • 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。

    • 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。

    • 但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

    上边这些大家先看一眼就可以了,下别我会详细展开:
    -> 进程(Process):
    在某种意义上我更乐意将进程看作是一个容器:容纳线程、内存(并不是物理内存而是虚拟内存)及数据的容器
    在这里插入图片描述

    内存是系统为进程分配的寻址空间,在32位操作系统中最多有2^32个寻址空间
    文件和网络是进程间共享的

    ->线程(Thread)
    在这里插入图片描述

    Stack:在线程中有调用堆栈,本质上就是一个栈:从主线程的入口main函数会不断的进行函数调用,在每一次调用中会将函数参数和返回地址压入栈中包括局部变量

    PC:记录下一条指令执行的地址

    TLS(线程局部存储):存放线程所独有的变量,目的:如果需要在一个线程内部的各个函数调用都能访问、但其它线程不能访问的变量(被称为static memory local to a thread 线程局部静态变量),就需要新的机制来实现。这就是TLS。

    这样解释一下对于上边的就会容易理解许多!

    对于寻址问题后期我会再写。

    展开全文
  • 进程 线程线程 并发 同步异步

    千次阅读 2014-11-21 13:43:06
    进程 线程线程 并发 同步异步 很多人对进程,线程,多线程,并发,同步,异步等概念感到困惑,这都是大学没好好听课的缘故啊.咱在这里帮感到概念给感到困惑的同学复习下.

    进程 线程 多线程 并发 同步异步

    很多人对进程,线程,多线程,并发,同步,异步等概念感到困惑,这都是大学没好好听课的缘故啊.咱在这里帮感到概念给感到困惑的同学复习下.

    程序

    程序用来描述计算机所完成的独立功能,并在时间上严格地按前后次序相继地进行计算机操作序列集合,是一个静态概念。

    进程

    并发执行的程序在执行过程中分配和管理资源的基本单位.是一个动态的执行过程.

    进程的静态描述
    1. 进程控制块PCB
    2. 有关程序段
    3. 该程序员对齐进行操作的数据结构集
    进程控制块PCB

    进程控制块PCB是系统管制进程存在的唯一实体,包含以下东西

    1. 描述信息(进程名或者进程标识号, 用户名或者用户标识号, 家族关系)
    2. 控制信息(进程当前状态, 进程优先级, 程序开始地址, 各种计时信息, 通信信息)
    3. 资源管理信息(占用内存大小及管理用数据结构指针 对换或覆盖用的有关信息 共享程序段大小及起始地址 io设备的相关信息 文件系统的指针以及相关标识)
    4. CPU现场保护结构

    并发

    所谓并发执行,是为了增强计算机系统的处理能力和提高资源利用率锁采取的一种同时操作技术.

    异步

    程序中的两部分在执行上没有顺序规定

    同步

    把异步环境下的一组并发进程,因直接制约而互相发送消息而进行互相合作,互相等待,使得各进程按一定的速度执行的过程称之为进程间的同步

    死锁

    多个并发进程因竞争资源而引起的一种僵局

    线程

    线程是进程的一部分,它没有自己的地址空间,它和进程内其他的线程一起共享分配给该进程的所有资源



    展开全文
  • 文章目录进程线程进程和线程的区别和联系区别联系举例说明进程和线程的区别进程/线程之间的亲缘性协程线程(执行一个函数)和协程的区别和联系协程和多线程的优势?为什么有了多线程还要引入协程?更多参考 进程 ...
  • 进程-线程-多线程 1、进程(process) 狭义定义:进程就是一段程序的执行过程 简单的来讲进程的概念主要有两点: 第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)...
  • Linux 进程线程是如何创建的?

    千次阅读 2020-03-16 09:56:41
    上文讲了《Linux进程在内核眼中是什么样子的?》,可以理解内核关于进程线程的所有管理就通过一个结构体 —— task_struct。知道了内核眼中进程...
  • python根据windows窗体句柄获取进程名和进程线程ID 依赖库:win32 ,psutil 实例代码 from win32 import win32process import psutil def test_windows_window(): app = win32gui.GetWindowText(67526) if win32...
  • Linux进程查看命令 PS命令 1.不带参数的ps使用 2.显示所有的当前进程 ps –ax -a 代表 all。同时加上x参数会显示没有控制终端的进程。 ps -ax | less 可以结合less命令和管道来使用以方便查看。 3.通过cpu和...
  • CPU 进程 线程

    千次阅读 2018-03-20 17:30:06
    1:CPU CPU是中央处理器,是一台计算机的运算核心...线程进程的实体,属于进程,是CPU调度和分派的基本单位,CPU将资源分配 给进程,所有线程共享该进程的资源。一个tomcat对应一个进程,访问 tomcat下的应用的时...
  • linux查看进程线程数量命令:

    万次阅读 2017-08-19 15:25:33
    linux查看进程线程数量命令:1、root@iZj6c7f7xayisgqsw2hpx8Z:~# pstree -p 1388 | wc -l 498 root@iZj6c7f7xayisgqsw2hpx8Z:~# 2、 root@iZj6c7f7xayisgqsw2hpx8Z:~# cat /proc/1388/status Name: java State:...
  • 在windows里查看oracle进程线程信息

    千次阅读 2013-11-07 13:20:39
    在windows里查看oracle进程线程信息 2010-09-16 Tag: Viewing Threads To view information on Oracle Database threads using Oracle Administration Assistant for Windows, you must either enable Windows ...
  • 进程线程及堆栈关系的总结 突然想到进程的栈和线程的栈,就顺便说一下,线程的栈被自动分配到进程的内存空间中 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。...
  • 进程线程面试题总结

    万次阅读 多人点赞 2017-08-11 15:55:32
    什么是线程进程是表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程放人进程...
  • 进程线程调度

    千次阅读 2016-06-15 16:16:24
    本文讲述的是linux和windows中的线程-进程调度基本原理。
  • 进程线程和并行并发

    千次阅读 2019-01-17 16:37:40
    定义 进程 进程是具有一定独立功能的程序,关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。一个进程要是能独立运行,它必须拥有一定的资源,包括用于存放程序正文,...线程进程...
  • 进程线程及堆栈关系的总结

    万次阅读 多人点赞 2011-05-08 17:23:00
    进程线程及堆栈关系的总结 突然想到进程的栈和线程的栈,就顺便说一下,线程的栈被自动分配到进程的内存空间中 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对...
  • 进程(process)和线程(thread)是操作系统的基本概念 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程进程的一个实体,是CPU调度和分派的基本...
  • 进程 线程 程序

    千次阅读 2012-07-17 17:16:59
    进程   对应用程序来说,进程就像一个大容器。在应用程序被运行后,就相当于将应用程序装进容器里了,你可以往容器里加其他东西(如:应用程序在运行...一个进程可以包含若干线程(Thread),线程可以帮助应用程序同时做
  • 进程线程的概念与区别

    千次阅读 2018-09-26 16:18:59
    实施方案: 多进程 多线程进程 优点 : 能并行执行多个任务,提高效率 创建方便,运行独立,不受其他进程影响 数据安全 缺点 : 进程的创建和删除都需要消耗计算机的资源 并行: 多个计算机核心在同时处理多个任务...
  • 操作系统进程线程题库

    千次阅读 多人点赞 2018-08-02 14:32:40
    网络课课后题 1、多道程序设计技术是操作系统中最早引入的软件技术,引入它的目的是 ...2、下列关于进程控制块PCB的叙述中,哪一个是错误的? A、操作系统利用PCB描述进程的基本特征 B、一个PCB唯一对应一个进程 ...
  • 名词解释 进程(Process)和线程(thread):...线程:(1)共享所在进程的内存空间(2)共享可变对象的共享时,需要同步(使用synchronization关键字维护线程安全)。(3)有独立的运行时栈,就像一个普通的函数...
  • 操作系统面试总结—进程线程

    千次阅读 2018-03-13 21:11:11
    最近在准备春招,复习到操作系统相关的知识,像面试中经常会问到的进程线程的区别,进程间的通信,进程调度等可以看看 希望这篇博客会对你有帮助进程的三种状态阻塞态:等待某个事件的完成就绪态:等待系统分配...
  • linux 程序 进程 线程的关系

    万次阅读 2018-03-19 20:10:20
    程序 定义:通常为二进制文件存放在存储媒介中(硬盘,光驱,软盘等),已物理文件的形式存在。 启动程序,通常要运行某个文件,这个文件... 一个标识符(PID),可以说进程就是一个运行中的程序。 用户在启动...
  • linux查看进程线程的方法

    万次阅读 2019-05-17 10:54:21
    在Linux中查看线程数的三种方法 ...否则,它一行显示一个进程。 2、ps xH 手册中说:H Show threads as if they were processes 这样可以查看所有存在的线程。 3、ps -mp <PID> 手册中说:m Show threads...
  • linux c 获取 进程 线程 id

    千次阅读 2020-05-24 09:08:02
    有些时候,需要在Log中打出进程线程的ID,以便调试、查找问题。 获取进程ID #include <unistd.h> pid_t getpid(void); 获取线程ID // 方法1 #include <sys/syscall.h> syscall(__NR_gettid) /...
  • C++ 进程线程优先级设置

    万次阅读 2015-04-08 16:04:17
    关于VC中程序进程优先级设置,可以包含 windows.h 头文件,然后添加下面这句话就可以 SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS);
  • 前一段时间被进程和线程的问题搞的云里雾里的,下决心弄清楚Android的进程线程管理机制;另外我个人认为Android程序与Java程序的区别:基于事件的编程模型,没有单一程序入口,生命周期的管理;为了更好的理解...
  • 进程线程 (一) 什么是进程? 计算机概念,程序在服务器运行时占据全部计算资源总和虚拟的,当一个程序开始运行时,它就是一个进程进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个...
  • linux查看进程线程

    千次阅读 2016-01-21 10:21:19
    基本概念:线程是最小调度单位

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 855,851
精华内容 342,340
关键字:

进程线程