首页 > 系统相关 >【OS系列】程序、进程与线程之区别大揭秘,一图读懂胜千言

【OS系列】程序、进程与线程之区别大揭秘,一图读懂胜千言

时间:2024-08-22 08:55:52浏览次数:6  
标签:操作系统 一个 千言 程序 线程 进程 执行 一图

1. 程序(Program)

程序是一组指令的集合,它存储在磁盘上,是一个静态的实体。

程序本身并不执行任何操作,它只是提供了一个执行的蓝图。

例如,一个编译好的可执行文件(如Windows的.exe文件)就是一个程序。

2. 进程(Process)

进程是程序的一次执行实例,是操作系统进行资源分配和调度的基本单位。当程序被加载到内存中并开始执行时,它就变成了一个进程。

进程拥有独立的内存空间、代码、数据和其他系统资源(如文件、I/O设备)。进程之间是相互独立的,一个进程的崩溃通常不会影响其他进程。

当你双击电脑文本编辑器的 .exe 文件时,操作系统会为该程序创建一个进程。这个进程中包含了程序运行所需的全部资源,比如代码段、数据段以及堆栈等。

3. 线程(Thread)

线程是进程中的一个执行单元,是操作系统进行调度的最小单位。

一个进程可以包含一个或多个线程,这些线程共享进程的资源,如内存和文件句柄。

线程之间的切换比进程之间的切换要快得多,因为它们共享相同的地址空间。

线程之间的通信和同步比进程之间的通信和同步要简单和高效。

继续以文本编辑器为例,当它运行时,可能会有多个线程。例如,一个线程负责处理用户界面的交互,另一个线程可能负责自动保存文档的功能。

4、总结

程序是静态的代码和数据的集合,进程是程序的动态执行实例,而线程是进程中的更小的执行单元。
进程提供了资源隔离和保护,而线程提供了更细粒度的并发控制。
理解这些概念对于编写高效和健壮的并发程序至关重要。

原创 代码百草园

标签:操作系统,一个,千言,程序,线程,进程,执行,一图
From: https://www.cnblogs.com/o-O-oO/p/18372925

相关文章

  • /* 线程读取循环队列*/
    /*线程读取循环队列*/#include<stdio.h>#include<stdlib.h>#include<pthread.h>#include<unistd.h>#defineQUEUE_SIZE5typedefstruct{intdata[QUEUE_SIZE];intfront;intrear;pthread_mutex_tlock;}CircularQueue......
  • 多线程
    1多线程创建方式1.1继承Thread类,重写run()方法publicclassMyThreadextendsThread{@Overridepublicvoidrun(){System.out.println("Runninginthread:"+Thread.currentThread().getName());}publicstaticvoidmain(String[]args......
  • 昇腾 - AscendCL C++应用开发 线程安全的队列
    昇腾-AscendCLC++应用开发线程安全的队列flyfishC++mutex各种各样的互斥锁mutex、timed_mutex、recursive_mutex、shared_mutexC++线程间同步的条件变量std::condition_variable和std::condition_variable_anyC++提供的智能指针unique_ptr、shared_ptr、wea......
  • 操作系统线程介绍
    线程介绍什么是线程:线程是操作系统能内够进行运算、执行的最小单位,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。总结:线程是进程的一部分,是进程内负责执行的单位,进程是由资......
  • 线程与进程的区别(多进程与多线程)
    线程与进程的区别(多进程与多线程)资源:进程采用虚拟空间+用户态/内核态机制,所以就导致进程与进程之间是互相独立的,各自的资源不可见。在同一进程中的各个线程都可以共享该进程所拥有的资源。多进程之间资源是独立的,多线程之间资源是共享的。通信:由于进程之间是互相独立的,需......
  • 面试必备之线程池
    概述在Java中要想实现线程,有四种手段:继承Thread类实现java.lang.Runnable接口实现java.util.concurrent.Callable泛型接口,利用线程池线程池通过线程复用机制,并对线程进行统一管理,优点:降低系统资源消耗。通过复用已存在的线程,降低线程创建和销毁造成的消耗;提高响应速度......
  • java线程池任务执行过程 | java线程池原理探究 | 线程池源码
    目录一、线程池的使用二、线程池的创建2.1构造方法及参数2.2拒绝策略2.2.1AbortPolicy(直接抛出异常)2.2.2 CallerRunsPolicy(将任务交给调用者处理)2.2.3 DiscardOldestPolicy(弹出队列中等待最久的任务)2.2.4 DiscardPolicy(无操作)2.2.5自定义拒绝策略(实现Rejected......
  • Android开发 - Handler 类处理线程通信与任务调度解析
    什么是Handler类是处理线程间通信和任务调度的一个重要工具,用于在不同的线程之间传递消息和执行任务使用场景线程间通信:在子线程中执行任务后,更新主线程(UI线程)的界面。任务调度:安排在将来某个时间点执行的任务。基本工作原理消息队列:每个线程(包括主线程)都有一个......
  • 线程常用api
    线程常用apipthread_create该api用于创建一个新线程intpthread_create(pthread_t*thread,constpthread_attr_t*attr,void*(*start_routine)(void*),void*arg)pthread_t*thread:指向线程标识符的指针,用于存储新创建的线程的线程标识符constpthread_attr_t*attr:用来......
  • [JAVA]创建多线程的三种方式与区别
    继承Thread类创建线程实现Runnable接口创建线程Callable接口创建线程要学习创建线程,我们要通过代码来演示,这里我们可以通过实现以下参赛者跑步的场景来展开。模拟以下场景                              模拟10......