文章编号:11231时间:2024-09-30人气:
进程优点:每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;
缺点:需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算 多进程调度开销比较大。
线程优点:无需跨进程边界;
缺点:每个线程与主程序共用地址空间,受限于2GB地址空间;
区别:
1、操作系统资源管理方式区别
进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。
2、所处环境区别
在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)
3、内存分配方面区别
系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。
网络百科—线程
什么是系统进程进程是指在系统中正在运行的一个应用程序;线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元。 对于操作系统而言,其调度单元是线程。 一个进程至少包括一个线程,通常将该线程称为主线程。 一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所谓基于多线程的多任务。 那进程与线程的区别到底是什么?进程是执行程序的实例。 例如,当你运行记事本程序(Nodepad)时,你就创建了一个用来容纳组成 的代码及其所需调用动态链接库的进程。 每个进程均运行在其专用且受保护的地址空间内。 因此,如果你同时运行记事本的两个拷贝,该程序正在使用的数据在各自实例中是彼此独立的。 在记事本的一个拷贝中将无法看到该程序的第二个实例打开的数据。 以沙箱为例进行阐述。 一个进程就好比一个沙箱。 线程就如同沙箱中的孩子们。 孩子们在沙箱子中跑来跑去,并且可能将沙子攘到别的孩子眼中,他们会互相踢打或撕咬。 但是,这些沙箱略有不同之处就在于每个沙箱完全由墙壁和顶棚封闭起来,无论箱中的孩子如何狠命地攘沙,他们也不会影响到其它沙箱中的其他孩子。 因此,每个进程就象一个被保护起来的沙箱。 未经许可,无人可以进出。 实际上线程运行而进程不运行。 两个进程彼此获得专用数据或内存的唯一途径就是通过协议来共享内存块。 这是一种协作策略。 下面让我们分析一下任务管理器里的进程选项卡。 这里的进程是指一系列进程,这些进程是由它们所运行的可执行程序实例来识别的,这就是进程选项卡中的第一列给出了映射名称的原因。 请注意,这里并没有进程名称列。 进程并不拥有独立于其所归属实例的映射名称。 换言之,如果你运行5个记事本拷贝,你将会看到5个称为的进程。 它们是如何彼此区别的呢?其中一种方式是通过它们的进程ID,因为每个进程都拥有其独一无二的编码。 该进程ID由Windows NT或Windows 2000生成,并可以循环使用。 因此,进程ID将不会越编越大,它们能够得到循环利用。 第三列是被进程中的线程所占用的CPU时间百分比。 它不是CPU的编号,而是被进程占用的CPU时间百分比。 此时我的系统基本上是空闲的。 尽管系统看上去每一秒左右都只使用一小部分CPU时间,但该系统空闲进程仍旧耗用了大约99%的CPU时间。 第四列,CPU时间,是CPU被进程中的线程累计占用的小时、分钟及秒数。 请注意,我对进程中的线程使用占用一词。 这并不一定意味着那就是进程已耗用的CPU时间总和,因为,如我们一会儿将看到的,NT计时的方式是,当特定的时钟间隔激发时,无论谁恰巧处于当前的线程中,它都将计算到CPU周期之内。 通常情况下,在大多数NT系统中,时钟以10毫秒的间隔运行。 每10毫秒NT的心脏就跳动一下。 有一些驱动程序代码片段运行并显示谁是当前的线程。 让我们将CPU时间的最后10毫秒记在它的帐上。 因此,如果一个线程开始运行,并在持续运行8毫秒后完成,接着,第二个线程开始运行并持续了2毫秒,这时,时钟激发,请猜一猜这整整10毫秒的时钟周期到底记在了哪个线程的帐上?答案是第二个线程。 因此,NT中存在一些固有的不准确性,而NT恰是以这种方式进行计时,实际情况也如是,大多数32位操作系统中都存在一个基于间隔的计时机制。 请记住这一点,因为,有时当你观察线程所耗用的CPU总和时,会出现尽管该线程或许看上去已运行过数十万次,但其CPU时间占用量却可能是零或非常短暂的现象,那么,上述解释便是原因所在。 上述也就是我们在任务管理器的进程选项卡中所能看到的基本信息列。 什么是线程?究竟什么是线程呢?正如在图A中所示,一个线程是给定的指令的序列 (你所编写的代码),一个栈(在给定的方法中定义的变量),以及一些共享数据(类一级的变量)。 线程也可以从全局类中访问静态数据。 栈以及可能的一些共享数据每个线程有其自己的堆栈和程序计数器(PC)。 你可以把程序计数器(PC)设想为用于跟踪线程正在执行的指令,而堆栈用于跟踪线程的上下文,上下文是当线程执行到某处时,当前的局部变量的值。 虽然你可以编写出在线程之间传送数据的子程序,在正常情况下,一个线程不能访问另外一个线程的栈变量。 一个线程必须处于如下四种可能的状态之一,这四种状态为:初始态:一个线程调用了new方法之后,并在调用start方法之前的所处状态。 在初始态中,可以调用start和stop方法。 runnable:一旦线程调用了start 方法,线程就转到Runnable 状态,注意,如果线程处于Runnable状态,它也有可能不在运行,这是因为还有优先级和调度问题。 阻塞/ NonRunnable:线程处于阻塞/NonRunnable状态,这是由两种可能性造成的:要么是因挂起而暂停的,要么是由于某些原因而阻塞的,例如包括等待IO请求的完成。 退出:线程转到退出状态,这有两种可能性,要么是run方法执行结束,要么是调用了stop方法。 最后一个概念就是线程的优先级,线程可以设定优先级,高优先级的线程可以安排在低优先级线程之前完成。 一个应用程序可以通过使用线程中的方法setPriority(int),来设置线程的优先级大小。
根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。 所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。 包含关系:没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
进程,是针对于操作系统而言的线程,是java中一个重要的类,主要用来多个方法一起执行 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。 进程和线程的区别在于: 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 线程在执行过程中与进程还是有区别的。 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。 但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。 但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。 这就是进程和线程的重要区别。 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.
在接触计算机的软件时,我们常常会听到线程、进程这两个词,很多人知道它们两个是不同的,但却不知道它们到底有什么不一样,甚至还有人将两者混为一谈,这显然是非常错误的,下面小编就来给大家分享一下进程和线程的区别。
进程和线程的区别
关于进程和线程的区别是有很多的,而简单的来说它们都是一个时间段的描述,也就是对CPU工作时间段的描述,其主要区别就在于进程是资源分配的最小单位,而线程是程序执行的最小单位,两者有着很紧密的联系,但也有很大的不同,具体不同之处如下:
1、进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)
2、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。
而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
3、线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。 不过如何处理好同步与互斥是编写多线程程序的难点。
4、但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
进程和线程的关系
1、一个进程可以有多个线程,但至少有一个线程;而一个线程只能在一个进程的地址空间内活动。
2、资源分配给进程,同一个进程的所有线程共享该进程所有资源。
3、CPU分配给线程,即真正在处理器运行的是线程。
4、线程在执行过程中需要协作同步,不同进程的线程间要利用消息通信的办法实现同步。
进程和线程的应用场景
使用多线程编程还是使用多进程编程,有一个简单的原则,如果能使用多线程实现的,就用多线程,不能使用多线程实现的,或者说,多线程会带来复杂度,那么使用多进程!
多线程有一个好处就是资源共享比较方便,如果还提供类似线程本地化的功能,那么多线程就算比较完美的了。多进程我目前的使用场景是网络通信,分布式计算(虽然没用过)!
进程间如果想通信,能使用的方法有:管道,信号量,消息,事件(WIN), socket等等。
内容声明:
1、本站收录的内容来源于大数据收集,版权归原网站所有!
2、本站收录的内容若侵害到您的利益,请联系我们进行删除处理!
3、本站不接受违法信息,如您发现违法内容,请联系我们进行举报处理!
4、本文地址:http://www.jujiwang.com/article/788579a1120e5ff7de8c.html,复制请保留版权链接!
简介线程暂停是一种机制,它允许我们暂时停止线程的执行,以便进行进一步的处理或操作,暂停线程对于调试、故障排除和执行特定任务非常有用,本文将探讨暂停线程的不同方法,以及每种方法的优缺点,暂停线程的方法有多种方法可以暂停线程,每种方法都有其独特的优点和缺点,wait,方法`wait,`方法是一种内置的Java方法,用于暂停当前线程,直...。
互联网资讯 2024-09-30 21:23:08
AWStats是一款免费且开源的Web服务器日志分析工具,可提供有关网站流量模式的宝贵见解,通过分析网站日志文件,AWStats可以生成详细的报告,显示各种指标,例如,访问者数量页面浏览量引荐来源搜索查询设备类型通过分析AWStats报告,网站所有者和营销人员可以深入了解网站流量,并制定数据驱动的决策以改善网站性能和用户参与度,本文将...。
本站公告 2024-09-30 15:19:14
StrictMode是React16.3中引入的一个非常重要的特性,它可以帮助开发者在开发阶段发现并及时修复应用程序中的潜在问题,从而提升应用程序的性能和稳定性,StrictMode的作用StrictMode主要通过以下方式帮助开发者发现应用程序中的问题,检查属性和生命周期方法的用法,确保它们符合React的最佳实践,捕获组件未挂载的...。
本站公告 2024-09-28 04:29:37
简介JavaServerPages,JSP,是一种服务器端技术,用于在Web应用程序中创建动态内容,它基于JavaServlet技术,并提供了一种简单的方法来融合HTML、XML和Java代码,以创建交互式Web页面,本教程旨在为Web开发人员提供深入了解JSP源代码结构和工作原理,我们将逐步剖析一个JSP文件,并解释其每个组件的目的...。
最新资讯 2024-09-24 11:35:14
引言PowerBuilder12是一款流行的快速应用程序开发,RAD,工具,用于开发Windows和移动应用程序,它以其易用性和快速的开发速度而闻名,在文章中,我们将PowerBuilder12与其他一些流行的开发工具进行比较,以了解其优势和劣势,优势1.易用性PowerBuilder12拥有一个非常易于使用的界面和直观的拖放式开发环...。
最新资讯 2024-09-24 02:47:13
结论本手册提供了CSS的全面概述,通过学习本文档中涵盖的概念,你可以掌握CSS的基础知识和高级特性,并创建美观且交互式的网页,...。
技术教程 2024-09-14 00:46:17
串口通信是一种广泛使用的技术,它允许计算机与外部设备进行数据交换,在Java中,串口通信可以通过java.util.comm包实现,要建立成功的串口通信,您需要正确配置串口参数,这些参数包括波特率、数据位、停止位和校验位,如果不正确配置这些参数,可能会导致通信错误或数据损坏,串口参数以下是Java中串口通信需要配置的主要串口参数,波特...。
本站公告 2024-09-12 14:25:08
欢迎来到ASP编程的全面指南!本教程将引导你从ASP编程的初学者到专家,ASP,ActiveServerPages,是一种服务器端编程技术,允许你创建交互式、动态的Web页面,先决条件在开始之前,你需要具备以下先决条件,基本的HTML和CSS知识对编程概念的基本了解,变量、数据类型、条件语句等,IIS,InternetInformat...。
本站公告 2024-09-09 18:04:14
引言在当今竞争激烈的数字环境中,网站性能已成为确保业务成功的关键因素,一个速度缓慢、响应迟钝的网站可能会导致访问者流失、转化率低和收入损失,为了帮助您解决这些挑战,我们很高兴为您提供经过优化的ASP源代码,旨在显著提升您的网站性能,ASP源代码的优势ASP,活动服务器页面,是一种强大的服务器端技术,可用于创建动态Web应用程序,我们的...。
技术教程 2024-09-06 17:26:49
对于初学者来说,SQL,结构化查询语言,可能会让人望而生畏,但是,通过本指南的逐步讲解,你将掌握SQL基础知识,并能够自信地处理数据,什么是SQL,SQL是一种计算机语言,专用于管理和查询数据库,数据库简介数据库是一个有组织的电子数据集合,它存储在计算机系统中,可以方便地访问和更新,SQL语句SQL语句用于对数据库执行操作,例如,创建...。
技术教程 2024-09-06 11:24:21
导航条是网站不可分割的一部分,它提供了一个清晰的路径,帮助用户浏览内容并找到所需信息,导航条可能出现问题,影响网站的可用性和用户体验,本文将探讨诊断和修复导航条问题的常见挑战,并提供最佳实践以确保最佳可用性,常见的导航条问题导航条常见的挑战包括,1.可视性差导航条放置位置不佳,与页面内容争夺用户注意力,导航链接文本与背景颜色对比度低,...。
技术教程 2024-09-05 10:54:50
1、海洋建站,海洋建站以提供专业定制服务而闻名,确保每个网站都能满足客户独特的需求,2、shopify,这是一个全球化的外贸网站建站公司,了解不同市场的文化和趋势,能够为客户打造具有国际吸引力的网站,3、shopyy,该公司非常注重用户体验,网站设计简洁明了,易于导航,确保访问者可以轻松找到所需信息,4、店匠,企业属于特定行业,店匠将...。
技术教程 2024-09-02 03:22:21