`

线程与进程的区别 ---- 20160816

阅读更多

 这问题,估计计算机专业的同学在找研发等工作的时候都会遇到过。前几天某老牌软件厂商的电话面试就提到了这一经典问题,今天招聘会上又有不少同学说在面试的时候被问到这点。在这里我就起个头,大家有啥想法意见等都欢迎回帖交流。

    要了解二者的区别与联系,首先得对进程与线程有一个宏观上的了解。

    进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位。每一个进程都有一个自己的地址空间,即进程空间或(虚空间)。进程空间的大小 只与处理机的位数有关,一个 16 位长处理机的进程空间大小为 216 ,而 32 位处理机的进程空间大小为 232 。进程至少有 5 种基本状态,它们是:初始态,执行态,等待状态,就绪状态,终止状态。

    线程,在网络或多用户环境下,一个服务器通常需要接收大量且不确定数量用户的并发请求,为每一个请求都创建一个进程显然是行不通的,——无论是从系统资源开销方面或是响应用户请求的效率方面来看。因此,操作系统中线程的概念便被引进了。线程,是进程的一部分,一个没有线程的进程可以被看作是单线程的。线程有时又被称为轻权进程或轻量级进程,也是 CPU 调度的一个基本单位。

    说到这里,我们对进程与线程都有了一个大体上的印象,现在开始说说二者大致的区别。

    进程的执行过程是线状的,尽管中间会发生中断或暂停,但该进程所拥有的资源只为该线状执行过程服务。一旦发生进程上下文切换,这些资源都是要被保护起来的。这是进程宏观上的执行过程。而进程又可有单线程进程与多线程进程两种。我们知道,进程有 一个进程控制块 PCB ,相关程序段 和 该程序段对其进行操作的数据结构集 这三部分,单线程进程的执行过程在宏观上是线性的,微观上也只有单一的执行过程;而多线程进程在宏观上的执行过程同样为线性的,但微观上却可以有多个执行操作(线程),如不同代码片段以及相关的数据结构集。线程的改变只代表了 CPU 执行过程的改变,而没有发生进程所拥有的资源变化。出了 CPU 之外,计算机内的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。与进程控制表和 PCB 相似,每个线程也有自己的线程控制表 TCB ,而这个 TCB 中所保存的线程状态信息则要比 PCB 表少得多,这些信息主要是相关指针用堆栈(系统栈和用户栈),寄存器中的状态数据。进程拥有一个完整的虚拟地址空间,不依赖于线程而独立存在;反之,线程是进程的一部分,没有自己的地址空间,与进程内的其他线程一起共享分配给该进程的所有资源

    线程可以有效地提高系统的执行效率,但并不是在所有计算机系统中都是适用的,如某些很少做进程调度和切换的实时系统。使用线程的好处是有多个任务需要处理机处理时,减少处理机的切换时间;而且,线程的创建和结束所需要的系统开销也比进程的创建和结束要小得多。最适用使用线程的系统是多处理机系统和网络系统或分布式系统。

----------------------------------

1. 线程的执行特性。

    线程只有 3 个基本状态:就绪,执行,阻塞。

    线程存在 5 种基本操作来切换线程的状态:派生,阻塞,激活,调度,结束。

2. 进程通信。

    单机系统中进程通信有 4 种形式:主从式,会话式,消息或邮箱机制,共享存储区方式。

        主从式典型例子:终端控制进程和终端进程。

        会话式典型例子:用户进程与磁盘管理进程之间的通信。

----------------------------------

原文链接:http://www.cnblogs.com/way_testlife/archive/2011/04/16/2018312.html

分享到:
评论

相关推荐

    程序,进程和线程的区别---马克-to-win java视频

    程序,进程和线程的区别---马克-to-win java视频的详细介绍

    进程与线程--小练习

    进程与线程的主要区别在于资源分配和独立性。进程是资源分配的基本单位,而线程是调度的基本单位。一个进程内的多个线程可以并发执行,共同完成一项任务,从而提高了程序的执行效率。但是,线程间的资源共享也带来了...

    vc++ multithread多线程教程---线程通信--利用事件对象,线程同步--使用信号量,线程同步--使用互斥量,线程同步--使用临界区

    临界区适用于在同一进程内的线程同步,不涉及跨进程的资源保护。 以上四种线程同步机制各有其适用场景,开发者应根据具体需求选择合适的工具。例如,事件对象适合于线程间的复杂通信和协调,信号量可以控制资源的...

    Python多线程与多进程-shenghe201604251

    【Python多线程与多进程】是编程领域中关于并发执行任务的重要概念,尤其是在Python这样的高级编程语言中。本文由何胜于2016年4月25日撰写,通过计算机与工厂的类比来解释这两个概念。 计算机通常被视为单核工厂,...

    八、进程线程 - 进程线程

    进程线程 进程线程

    73道Java面试题合集-多线程与进程

    2. **线程与进程的区别**: - 进程间不共享内存,而线程间默认共享内存,通信更高效。 - 创建和销毁进程开销大,线程则小得多。 - 每个进程有独立的代码和数据空间,线程只有一份共享的代码和数据空间。 3. **...

    \嵌入式linux开发教程之进程与线程--千锋培训

    嵌入式Linux开发教程深入探讨了进程与线程的概念及其在操作系统中的实现,这对于理解和开发高效、并发的嵌入式应用程序至关重要。以下是这些知识点的详细解释: **一、基础知识:线程和进程** 1. **进程**:是操作...

    线程和进程的区别.txt

    #### 进程与线程的区别 1. **资源管理**: - **进程**:每个进程拥有独立的地址空间和资源,这意味着一个进程中的修改不会影响到其他进程。 - **线程**:同一进程内的所有线程共享地址空间和资源,这使得线程之间...

    多线程和多进程的管理

    #### 一、多进程与多线程的概念 - **多进程**:是指在操作系统中能够同时运行多个程序的过程。每个进程都有独立的代码、数据空间和资源,彼此之间不会互相影响。 - **多线程**:是在同一进程中,通过共享内存的方式...

    c++ 多线程编程之三----线程间通讯

    由于属于同一个进程的各个线程共享操作系统分配该进程的资源,故解决线程间通信最简单的一种方法是使用全局变量。对于标准类型的全局变量,我们建议使用 volatile 修饰符,它告诉编译器无需对该变量作任何的优化,即...

    多线程编程指南--linux多线程编程的好东东

    - **占用较少的系统资源**:与进程相比,线程共享相同的内存空间,因此启动和切换成本较低。 - **结合线程和RPC**:线程可以与远程过程调用(RPC)相结合,以构建高效且灵活的分布式系统。 **多线程概念** - **...

    进程与线程的区别

    进程与线程的区别 - 博客园.mht 进程与线程的区别 - 博客园.mht 进程与线程的区别 - 博客园.mht

    华清远见嵌入式学习-IO进程线程-作业5

    华清远见嵌入式学习-IO进程线程-作业5 本资源摘要信息涵盖了嵌入式系统学习中的多个方面,包括栈和队列、标准IO和文件IO、数组和链表、快速排序算法、后台程序执行、多线程和进程的比较、创建子进程中的写时拷贝...

    进程与线程的区别和联系

    ### 进程与线程的区别和联系 #### 进程的概念 进程是计算机程序的一次动态执行过程,它是操作系统资源分配的基本单位。一个程序在执行过程中可能会产生多个进程实例,每个进程都有自己的独立地址空间、资源(如内存...

    进程与线程的生动形象理解

    本文旨在通过一个生动的类比来帮助读者更好地理解进程与线程的基本概念及其差异,并进一步探讨它们在实际应用中的联系与区别。 #### 二、生动形象的类比 为了更好地理解进程与线程,我们可以将计算机比喻成一座工厂...

    闻怡洋VC专题教程ActiveX控件开发 进程/线程控制 文件操作 内存管理

    |------ 4.1 为什么需要多进程/线程 |------ 4.2 进程控制 |------ 4.3 线程控制 |------ 4.4 进程/线程间同步 +------ 4.5 进程间通信 +-- 第五章 文件操作 +------ 5.1 磁盘文件的打开与关闭 +------ 5.2 磁盘...

    进程和线程之间的关系

    下面将详细阐述进程与线程之间的区别及其相互作用。 #### 一、进程的概念 进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位。每一个进程都有独立的地址空间和系统资源,包括但不限于内存段、打开的...

    进程与线程 进程与线程

    ### 进程与线程详解 #### 进程概述 **进程**是在计算机科学中用于描述程序执行时的一种抽象概念,特别是在并发环境中。一个进程可以视为一个正在运行的应用程序实例,它包含了执行所需的所有资源(如内存、处理器...

    多线程精品资源--这是RedSpider社区成员原创与维护的Java多线程系列文章。.zip

    - **线程的定义**:线程是程序执行的最小单元,一个进程中可以包含多个线程,它们共享同一内存空间,各自拥有独立的执行流。 - **创建线程**:Java提供了两种方式创建线程——通过实现Runnable接口或继承Thread类...

    android 进程与线程 - 开发文档翻译 - 进程.doc

    在Android系统中,进程和线程是应用程序执行的基础。每个应用组件的启动都可能伴随着新进程的创建或已有进程的重用。默认情况下,同一应用的所有组件在同一进程中运行,共享一个主线程。这是因为主线程负责处理用户...

Global site tag (gtag.js) - Google Analytics