精华内容
下载资源
问答
  • 每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立 Dalvik虚拟机实例.而每一个DVM都是在Linux中一个进程,所以说可以认为是同一个概念.b DVM指dalvik虚拟机.每一个Android应用程序都在它自己...

    D
    a DVM指dalvik的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立 的Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念.
    b DVM指dalvik的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux 中的一个进程,所以说不是一个概念.
     c DVM指dalvik的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux 中的一个进程,所以说不是一个概念
    d DVM指dalvik的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik虚拟机实例.而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念.
    展开全文
  • 说法二:进程和线程都是由操作系统所体会的程序运行基本单元,系统利用该基本单元实现系统对应用并发性。进程和线程区别在于: 巴拉巴拉。。。(抱歉我已经看不下去了,有兴趣者可自行百度

    有个话题似乎永远都不会结束,那就是进程和线程的区别。下面是我们在百度搜到的官方的回答。

    说法一:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 
    说法二:进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于: 
    巴拉巴拉。。。(抱歉我已经看不下去了,有兴趣者可自行百度,如此的描述被无数次转载引用。)

    以上的描述仿佛是高中物理课本上描述一个定理般无懈可击,但是,总觉得哪里不对劲。。。

    是的,看完之后不出十分钟,再问你进程与线程的区别,你的脑子依然一片混沌。当然,如果你是过目不忘或记忆力超群的天才,能准确把这些内容背出来除外。

    出现这种情况也许是因为,进程和线程本身都是比较抽象的概念,你不能实实在在的看到它们,然后指出来。那是一个进程,那是一把线程。当然,你可以用命令查看它们,但是这并不能帮助你更好的理解它们之间的差异。

    如果能将它们类比成我们容易理解的东西,也许会帮助我们了解这个问题的答案。下面,我尝试用更加形象的方法说明他们之间的区别。

    ok,现在需求来了,要求我们盖一栋楼。盖楼需要的建材都在当地ZF那里(假设),如有需要你可以向它申请。(ZF=OS,建材=内存,CPU等系统资源)

    要盖楼我们得有施工队啊,于是我们找来了施工人员,里面有水泥工,瓦工,搬运工等。(Coding。。这些工人就相当于能干活的一行行代码)

    好,人招齐了,现在就要开始干活。没有建材怎么干活啊,于是我们向ZF申请砖,水泥,钢筋等建材。施工队对ZF说,“我们要干活了,请给我们建材。”ZF看了一下手头的储备,发现挺充裕,说“OK,给你们,停工的时候记得还回来。”(程序要执行了,需要向系统申请资源。这个时候,其实进程的概念出现了,进程就是应用程序一次执行的过程,在这里,当我们开始施工盖楼,进程就算创建了。只有以施工队的名义向ZF申请资源,它才会给你,这也是ZF受理资源申请请求的最低级别部门,这也就是所谓的“进程是系统进行资源分配的最小单位。)

    接下来,施工队中的水泥工拿到了水泥开始混水泥,瓦工开始砌瓦,搬运工开始搬砖,各司其职,相互独立,勤勤恳恳。(这些真正在干活的工人们就是所谓的线程,他们隶属于这个这个施工活动(进程)中,共享施工队向ZF申请来的资源。这也就是所谓的“线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位“)

    利用这种类比的方法也可以理解多线程的优点,线程间的通信为什么比进程间更加高效,资源共享与互斥等问题,请自行拓展。

    展开全文
  • 关于进程和线程

    2019-04-12 17:26:00
    最直观的就是一个个 pid, 官方的说法就:进程程序在计算机上的一次执行活动。线程是可执行代码的可分派单元。这个名称来源于 “ 执行的线索 ” 的概念。在基于线程的多任务的环境中,所有进程有至少一个线程,但是...

    什么是进程。最直观的就是一个个 pid, 官方的说法就:进程是程序在计算机上的一次执行活动。线程是可执行代码的可分派单元。这个名称来源于 “ 执行的线索 ” 的概念。在基于线程的多任务的环境中,所有进程有至少一个线程,但是它们可以具有多个任务。这意味着单个程序可以并发执行两个或者多个任务。
     
    1.概念
    进程:正在运行中的程序。
    线程:进程中的一条执行路径。
     
    2.区别
    (1)通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。
    (2)线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文。多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定。线程的运行中需要使用计算机的内存资源和CPU。
    (3)进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。
    (4)线程的上下文切换远大于进程间上下文切换的速度。
    (5)进程是不可执行的实体,程序是一个没有生命的实体,只有当处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。
     
    3.线程和进程的关系以及区别?
    进程和线程的关系:
    (1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
    (2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。
    (3)处理机分给线程,即真正在处理机上运行的是线程。
    (4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。线程是指进程内的一个执行单元,也是进程内的可调度实体.
    进程与线程的区别:
    (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
    (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
    (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.
    (4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。 
     

    【QPS】
    QPS(Query Per Second),QPS 其实是衡量吞吐量(Throughput)的一个常用指标,就是说服务器在一秒的时间内处理了多少个请求 —— 我们通常是指 HTTP请求,显然数字越大代表服务器的负荷越高、处理能力越强。并发用户数 是指系统可以同时承载的正常使用系统功能的用户的数量。

     

    【服务器负载过高的解决方案】
    top命令查询服务器负载达到2.0-5之间,nginx的cpu使用率达到104%
    问题分析过程:
    (1)df -h 命令,查看磁盘是否是否超出正常范围
    (2)free 命令,查看内存使用率是否超出正常范围
    问题引出:如何确定nginx的100%的cpu使用率到底问题在哪?
    ps -ef | grep nginx 查询出nginx的进程PID(eg:8209)
    ps -aux | grep nginx 查询出该进程是哪个用户启动的(即使ROOT用户可能也导出线程快照失败)
    su root 切换到进程启动用户

    转载于:https://www.cnblogs.com/rxbook/p/10697359.html

    展开全文
  • 关于进程和线程以及句柄

    万次阅读 2010-10-26 10:34:00
    说法一:进程是具有一定独立功能的程序关于某个数据集合上一次运行活动,进程是系统进行资源...同一个进程中多个线程之间可以并发执行 说法二:进程和线程都是由操作系统所体会的程序运行基本单元,系统利用该基本
    说法一:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.

    线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

    一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行



    说法二:进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:

    简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

    线程的划分尺度小于进程,使得多线程程序的并发性高。

    另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

    线程在执行过程中与进程还是有区别的。每个独立的程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

    从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。



    说法三:多线程共存于应用程序中是现代操作系统中的基本特征和重要标志。用过UNIX操作系统的读者知道进程,在UNIX操作系统中,每个应用程序的执行都在操作系统内核中登记一个进程标志,操作系统根据分配的标志对应用程序的执行进行调度和系统资源分配,但进程和线程有什么区别呢?

    进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:

    线程的划分尺度小于进程,使得多线程程序的并发性搞。

    另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

    线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

    从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

    进程(Process)是最初定义在Unix等多用户、多任务操作系统环境下用于表示应用程序在内存环境中基本执行单元的概念。以Unix操作系统为例,进程是Unix操作系统环境中的基本成分、是系统资源分配的基本单位。Unix操作系统中完成的几乎所有用户管理和资源分配等工作都是通过操作系统对应用程序进程的控制来实现的。

    C、C++、Java等语言编写的源程序经相应的编译器编译成可执行文件后,提交给计算机处理器运行。这时,处在可执行状态中的应用程序称为进程。从用户角度来看,进程是应用程序的一个执行过程。从操作系统核心角度来看,进程代表的是操作系统分配的内存、CPU时间片等资源的基本单位,是为正在运行的程序提供的运行环境。进程与应用程序的区别在于应用程序作为一个静态文件存储在计算机系统的硬盘等存储空间中,而进程则是处于动态条件下由操作系统维护的系统资源管理实体。多任务环境下应用程序进程的主要特点包括:

    ●进程在执行过程中有内存单元的初始入口点,并且进程存活过程中始终拥有独立的内存地址空间;

    ●进程的生存期状态包括创建、就绪、运行、阻塞和死亡等类型;

    ●从应用程序进程在执行过程中向CPU发出的运行指令形式不同,可以将进程的状态分为用户态和核心态。处于用户态下的进程执行的是应用程序指令、处于核心态下的应用程序进程执行的是操作系统指令。

    在Unix操作系统启动过程中,系统自动创建swapper、init等系统进程,用于管理内存资源以及对用户进程进行调度等。在Unix环境下无论是由操作系统创建的进程还要由应用程序执行创建的进程,均拥有唯一的进程标识(PID)。

    说法四:应用程序在执行过程中存在一个内存空间的初始入口点地址、一个程序执行过程中的代码执行序列以及用于标识进程结束的内存出口点地址,在进程执行过程中的每一时间点均有唯一的处理器指令与内存单元地址相对应。

    Java语言中定义的线程(Thread)同样包括一个内存入口点地址、一个出口点地址以及能够顺序执行的代码序列。但是进程与线程的重要区别在于线程不能够单独执行,它必须运行在处于活动状态的应用程序进程中,因此可以定义线程是程序内部的具有并发性的顺序代码流。

    Unix操作系统和Microsoft Windows操作系统支持多用户、多进程的并发执行,而Java语言支持应用程序进程内部的多个执行线程的并发执行。多线程的意义在于一个应用程序的多个逻辑单元可以并发地执行。但是多线程并不意味着多个用户进程在执行,操作系统也不把每个线程作为独立的进程来分配独立的系统资源。进程可以创建其子进程,子进程与父进程拥有不同的可执行代码和数据内存空间。而在用于代表应用程序的进程中多个线程共享数据内存空间,但保持每个线程拥有独立的执行堆栈和程序执行上下文(Context)。

    基于上述区别,线程也可以称为轻型进程 (Light Weight Process,LWP)。不同线程间允许任务协作和数据交换,使得在计算机系统资源消耗等方面非常廉价。

    线程需要操作系统的支持,不是所有类型的计算机都支持多线程应用程序。Java程序设计语言将线程支持与语言运行环境结合在一起,提供了多任务并发执行的能力。这就好比一个人在处理家务的过程中,将衣服放到洗衣机中自动洗涤后将大米放在电饭锅里,然后开始做菜。等菜做好了,饭熟了同时衣服也洗好了。

    需要注意的是:在应用程序中使用多线程不会增加 CPU 的数据处理能力。只有在多CPU 的计算机或者在网络计算体系结构下,将Java程序划分为多个并发执行线程后,同时启动多个线程运行,使不同的线程运行在基于不同处理器的Java虚拟机中,才能提高应用程序的执行效率。

    所谓句柄实际上是一个数据,是一个Long (整长型)的数据。

    句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。

    从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。

    如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢?

    为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。

    句柄地址(稳定)→记载着对象在内存中的地址————→对象在内存中的地址(不稳定)→实际对象

    本质:WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。

    但是必须注意的是程序每次从新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄,而且绝大多数情况的确不一样的。假如我们把进入电影院看电影看成是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电影院售给我们的门票总是不同的一个座位是一样的道理。


    线程是指程序的一个指令执行序列,WIN32 平台支持多线程程序,允许程序中存在多个线程。 在单 CPU 系统中,系统把 CPU 的时间片按照调度算法分配给各个线程,因此各线程实际上是分时执行的,在多 CPU 的 Windows NT 系统中, 同一个程序的不同线程可以被分配到不同的 CPU 上去执行。由于一个程序的各线程是在相同的地址空间运行的,因此设及到了如何共享内存, 如何通信等问题,这样便需要处理各线程之间的同步问题,这是多线程编程中的一个难点。

    线程,也被称为轻量进程(lightweight processes)。计算机科学术语,指运行中的程序的调度单位。

    线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的全部资源。线程可以创建和撤消线程,从而实现程序的并发执行。一般,线程具有就绪、阻塞和运行三种基本状态。

    在多中央处理器的系统里,不同线程可以同时在不同的中央处理器上运行,甚至当它们属于同一个进程时也是如此。大多数支持多处理器的操作系统都提供编程接口来让进程可以控制自己的线程与各处理器之间的关联度(affinity)。

    进程是程序在一个数据集合上运行的过程(注:一个程序有可能同时属于

    多个进程),它是操作系统进行资源分配和调度的一个独立单位,进程可以简单的分为系统进程(包括一般

    Windows程序和服务进程)和用户进程



    Linux下的进程和线程

    可执行文件由指令和数据组成。进程就是在计算机上运行的可执行文件针对特定的输入数据的一个实例,同一个可执行程序文件如果操作不同的输入数据就是两个不同的进程。
    线程是进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享其所附属的进程的所有的资源,包括打开的文件、页表(因此也就共享整个用户态地址空间)、信号标识及动态分配的内存等等。线程和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一物理内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。
    Linux在核外采用1:1线程模型,即用一个核心进程(轻量进程)对应一个线程,将线程调度等同于进程调度,交给核心完成,而其它诸如线程取消、线程间的同步等工作,都是在核外线程库中完成的。因此可以把进程看作一组线程,这组线程拥有相同的线程组号(TGID),这个TGID就是这组线程序所附属的进程的ID号,每个线程的ID号就是我们用ps命令所看到的LWP号。
    为了方便,从现在起我们用任务来代替进程和线程,即每提到任务,我们就是指线程和进程,除非要强调线程和进程之间的不同之处。任务的周期从被fork开始一直到给任务从进程表中消失。一个进程包括:正文段(text),数据段(data),栈段(STACK)和共享内存段(SHARED MEMORY)。
    转载声明: 本文转自 http://www.cnitblog.com/Patrick/archive/2006/12/23/20997.html
    展开全文
  • 关于线程和进程

    2018-07-09 00:21:00
     线程是啥,官方说法程序执行流最小单位,一个或多个线程组成一个进程。嘛意思,计算机知识非得搞这么抽象吗??百度是最好老师,在知乎上看到一篇非常有趣又较好理解文章(开桌子),此处放链接 ...
  • 说法一:进程是具有一定独立功能的程序关于某个数据集合上一次运行活动,进程是系统进行资源分配调度一个独立单位. 线程是进程的一个实体,是CPU调度分派基本单位,它是比进程更小能独立运行基本单位....
  • 进程和线程区别

    2017-12-04 13:44:00
    说法一:进程是具有一定独立功能的程序关于某个数据集合上一次运行活动,进程是系统进行资源分配调度一个独立单位.线程是进程的一个实体,是CPU调度分派基本单位,它是比进程更小能独立运行基本单位.线程...
  • 总结起来就是,线程是进程的一部分,进程程序的一部分。这个说法不准确,但是可以指出期间的差别;   进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配调度的一个...
  • mfc 进程的诞生死亡

    2016-12-29 10:13:00
    进程概念  进程的诞生  进程的死亡 一、 进程: ...双击一个EXE图标时,系统就会产生一个相应的进程,分配相应的资源,并执行相应的代码。...2、标准一些的说法: ...它不只是程序的代码,还包括当...
  • 线程和进程的区别

    2013-09-22 23:16:21
    说法一:进程是具有一定独立功能的程序关于某个数据集合上一次运行活动,进程是系统进行资源分配调度一个独立单位. 线程是进程的一个实体,是CPU调度分派基本单位,它是比进程更小能独立运行基本...
  • 进程和线程区别

    千次阅读 2005-12-17 21:13:00
    说法一:进程是具有一定独立功能的程序关于某个数据集合上一次运行活动,进程是系统进行资源分配调度一个独立单位. 线程是进程的一个实体,是CPU调度分派基本单位,它是比进程更小能独立运行基本单位....

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 132
精华内容 52
关键字:

关于进程和程序的说法