51Testing软件测试论坛

标题: 什么是多线程?什么是多进程?有何区别? [打印本页]

作者: kpxl    时间: 2005-2-15 09:46
标题: 什么是多线程?什么是多进程?有何区别?
如题!
作者: Nio    时间: 2005-2-15 09:50
多线程:类似“多通道”
多进程:类似“排队”
作者: baitest    时间: 2005-2-15 10:09
线程的外壳是进程,进程管理线程;
线程不占用系统资源,而进程占用系统资源;
作者: pcl2004_27    时间: 2005-2-15 11:22
什么叫进程?进程同程序有什么区别?
答:进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。显然,程序是死的(静态的),进程是活的(动态的)。进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程就是系统进程,它们就是处于运行状态下的操作系统本身;用户进程就不必我多讲了吧,所有由你启动的进程都是用户进程。进程是操作系统进行资源分配的单位。
在Windows下,进程又被细化为线程,也就是一个进程下有多个能独立运行的更小的单位。
   在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这便是多任务。现代的操作系统几乎都是多任务操作系统,能够同时管理多个进程的运行。 多任务带来的好处是明显的,比如你可以边听mp3边上网,与此同时甚至可以将下载的文档打印出来,而这些任务之间丝毫不会相互干扰。那么这里就涉及到并行的问题,俗话说,一心不能二用,这对计算机也一样,原则上一个CPU只能分配给一个进程,以便运行这个进程。我们通常使用的计算机中只有一个CPU,也就是说只有一颗心,要让它一心多用,同时运行多个进程,就必须使用并发技术。实现并发技术相当复杂,最容易理解的是“时间片轮转进程调度算法”,它的思想简单介绍如下:在操作系统的管理下,所有正在运行的进程轮流使用CPU,每个进程允许占用CPU的时间非常短(比如10毫秒),这样用户根本感觉不出来CPU是在轮流为多个进程服务,就好象所有的进程都在不间断地运行一样。但实际上在任何一个时间内有且仅有一个进程占有CPU。
 如果一台计算机有多个CPU,情况就不同了,如果进程数小于CPU数,则不同的进程可以分配给不同的CPU来运行,这样,多个进程就是真正同时运行的,这便是并行。但如果进程数大于CPU数,则仍然需要使用并发技术。
  在Windows中,进行CPU分配是以线程为单位的,一个进程可能由多个线程组成,这时情况更加复杂,但简单地说,有如下关系:

  总线程数<= CPU数量:并行运行

  总线程数> CPU数量:并发运行

  并行运行的效率显然高于并发运行,所以在多CPU的计算机中,多任务的效率比较高。但是,如果在多CPU计算机中只运行一个进程(线程),就不能发挥多CPU的优势。

这里涉及到多任务操作系统的问题,多任务操作系统(如Windows)的基本原理是:操作系统将CPU的时间片分配给多个线程,每个线程在操作系统指定的时间片内完成(注意,这里的多个线程是分属于不同进程的).操作系统不断的从一个线程的执行切换到另一个线程的执行,如此往复,宏观上看来,就好像是多个线程在一起执行.由于这多个线程分属于不同的进程,因此在我们看来,就好像是多个进程在同时执行,这样就实现了多任务.Whoops,真绕口.

所以结合楼上的答复,不知道楼主是否可以满意!

关于多线程,多进程的问题,楼主可以看看操作系统方面的书,可以得到更多的启示!


  如上,多线程和多任务是有很明显的区别的.但是再想一下,在一个应用程序内实现多线程不也是靠CPU分配时间片吗?既然原理是相同的,那么多线程也可以说是多任务的.
作者: kpxl    时间: 2005-2-15 15:28
谢谢你的回答,是不是可以这样理解,多进程是同时处理多个任务(或者说程序),而多线程是同时处理多个线程,这些线程可以是一个任务的,也可以是不同的任务的。
上午查资料看到这样的一个说法,感觉很有道理,就是对于单CPU的计算机来说,多线程是没有意义的,只是因为CPU处理的时间或者说时间的切片很小,我们不太能够感觉到而已。不知道我这样理解是不是错误?
作者: onlyrun    时间: 2005-2-21 13:59
pcl2004_27说的太好了,我以前没有听说过什么"进城","县城"的(我是农村来的),不过哦现在我懂了,说的真好.
作者: baitest    时间: 2005-2-21 16:30
标题: 楼上的说的真有意思!

作者: 983221wy    时间: 2006-4-15 00:12
谢谢了!!!
作者: 11034    时间: 2006-4-15 23:03
受教~~
作者: zye    时间: 2006-4-21 16:04
还是不太imingbai
作者: caesarqth    时间: 2006-5-11 15:12
谢谢,对二者的区别有了更深一步的了解
作者: tangaf    时间: 2006-5-17 10:18
标题: 谢谢
pcl2004_27 不愧为超级斑竹亚
作者: Joan2005    时间: 2006-6-9 17:38
pcl2004-27说的太好了!
在单CPU下,在微观上讲,CPU还是在处理一个任务,利用“时间片轮转进程调度算法”,执行不同的任务(线程),因为时间片比较微小,察觉不出来,所以宏观上看来,CPU在处理多任务。
说白了,单CUP下,电脑还是在一心一用的!
作者: 李逍遥    时间: 2006-6-12 11:08
说的太好了!
作者: zgnmgly    时间: 2006-6-20 10:36
学习了
作者: zhrh0208    时间: 2006-6-27 18:09
[quote]原帖由 [i]kpxl[/i] 于 2005-2-15 15:28 发表
谢谢你的回答,是不是可以这样理解,多进程是同时处理多个任务(或者说程序),而多线程是同时处理多个线程,这些线程可以是一个任务的,也可以是不同的任务的。
上午查资料看到这样的一个说法,感觉很有道理, ... [/quote]


你的理解是错误滴,对于单cpu,多线程的速度要更快些,简单理解就是,进程的切换需要切换进程所调用的资源,但线程属于同一个进程,线程见的切换无需切换所调用的资源,速度要快些。

不是很会描述,不知道你懂列灭
作者: jihuli5    时间: 2006-6-27 22:02
简单的来说,进程就是一个程序运行的时候被CPU抽象出来的,一个程序运行后被抽象为一个进程,但是线程是从一个进程里面分割出来的,由于CPU处理进程的时候是采用时间片轮转的方式,所以要把一个大个进程给分割成多个线程。
作者: lcyrb    时间: 2006-6-28 22:27
进程指的是任务吧,多进程就是多个任务在执行
线程应该是进程的具体表现,多线程可以在同一个进程下,也可以在多个进程中
作者: jokie    时间: 2006-7-4 09:29
标题: 我顶
[font=宋体][color=Pink]希望大家能够交我这个朋友!我的QQ:215143066,MSN:jickllyloveshe@hotmail.com
欢迎加入我的群!26526836

[/color][/font]
作者: qkhhapgy    时间: 2006-7-9 14:39
进程是最小的分配单位,而进程是最小的执行单位
作者: hongye    时间: 2006-8-13 18:47
标题: 新手
受益匪浅,谢谢!
本人同意 kpx的观点!l
jihuli5说的似乎和kpx说的不是一个问题
作者: 我是海    时间: 2006-8-13 19:48
对版主baitest说线程不占用系统资源,有不同看法,我记得线程是系统分配资源的最小单位,也是要占用系统资源的
作者: wangjjzwsina    时间: 2006-8-15 11:06
这是好基础的东西啊,楼主不是学计算机的吧?
作者: walker_lai    时间: 2006-8-30 14:37
学习先
作者: wy123789    时间: 2007-2-5 14:36
sdlkfj2
作者: nicholas.hl    时间: 2007-2-5 15:15
[color=Blue][size=3]感谢LZ,看帖必回是美德[/size][/color]
作者: 鱼鳞    时间: 2007-2-9 16:03
[quote]原帖由 [i]pcl2004_27[/i] 于 2005-2-15 11:22 发表
什么叫进程?进程同程序有什么区别?
答:进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。显然,程序是死的(静态的),进程是活的(动态的)。进程可以分为系统进程和用户进程。凡 ... [/quote]

谢谢
作者: hnxhq    时间: 2007-2-10 09:22
学习了,谢谢。
作者: Jeongspear    时间: 2007-3-6 10:37
CPU同时运行多个任务叫多进程,我想问:是不是一个进程下的多个线程同时运行叫多线程?而分别属于多个进程的下的线程同时运行也可以叫多线程?
作者: 橘子红了    时间: 2007-3-7 19:25
^_^
受益匪浅
作者: nan3937    时间: 2007-3-10 13:11
[quote]原帖由 [i]zhrh0208[/i] 于 2006-6-27 18:09 发表



你的理解是错误滴,对于单cpu,多线程的速度要更快些,简单理解就是,进程的切换需要切换进程所调用的资源,但线程属于同一个进程,线程见的切换无需切换所调用的资源,速度要快些。

不是很会描述,不 ... [/quote]
多线程其实就是把一个进程分成很多个小块来进行,看上去好像是同时的,其实就是把任务1先做10%(随便说个数字)再把任务2做10%。。。从而达到看上去时几个任务同时做的。但是不需要切换所调用的资源,不想多进程,每次切换都要重新调用。。。
作者: dwgc    时间: 2007-3-13 16:16
[quote]原帖由 [i]Nio[/i] 于 2005-2-15 09:50 发表
多线程:类似“多通道”
多进程:类似“排队” [/quote]


精辟
作者: 欣奕    时间: 2007-3-14 10:30
sdlkfj2 学习了!
作者: ldk0501    时间: 2007-3-14 15:17
[quote]原帖由 [i]我是海[/i] 于 2006-8-13 19:48 发表
对版主baitest说线程不占用系统资源,有不同看法,我记得线程是系统分配资源的最小单位,也是要占用系统资源的 [/quote]

进程才是系统资源分配的最小单位,而线程是cpu调度的最小单位.
作者: you力    时间: 2007-3-20 17:08
一个进程中至少包括一个线程
作者: yuyanshe    时间: 2007-3-22 18:59
时间换取空间,空间换取时间。。。
作者: linostk    时间: 2007-3-25 21:42
越听越糊涂~~~
作者: guoxing0865    时间: 2007-4-3 15:23
做个记号
作者: liulinzhu    时间: 2007-5-31 08:53
学习了。
作者: tlisbbgo    时间: 2007-6-3 00:31
一个进程中至少包括一个线程也可以拥有多个线程.当拥有多个线程时进程必须在全部线程完成或关闭后才能结束.
而一个线程只能从属于一个进程.进程并不一定随线程的关闭而结束.
作者: woaigba    时间: 2007-6-9 18:03
需要时间消化一下,嗯嗯。
作者: 微雨燕飞    时间: 2007-6-9 19:46
进程可以划分成多个线程,进程是动态的,而程序是静态的。
谢谢二楼的!
作者: yeqiuangel    时间: 2007-6-15 21:46
今天测试笔试也有类似的题目,学操作系统的时候学过,现在都忘记了的哦,呵呵!!
作者: 凝凝    时间: 2007-6-18 17:48
pcl2004-27说的太棒了,小女子受益匪浅呀!sdlkfj5 sdlkfj5 sdlkfj5 sdlkfj2
作者: weili_0605    时间: 2007-6-19 10:20
分析的太好了
作者: shtina    时间: 2007-6-19 22:29
线程有两种,一种是占用系统资源的,叫内核支持线程,另一种是不占用系统资源的,叫用户级线程,用户级线程不依赖于内核,所以他在创建、撤销、切换的时候都不利用系统调用实现。
作者: mans    时间: 2007-7-13 21:05
说的太好了!
作者: tianming08    时间: 2007-7-30 13:30
学习中,印个脚印!!sdlkfj2
作者: dylkaren    时间: 2007-8-2 15:49
标题: 时间允许建议看一下计算机原理 和wondows操作系统原理
时间允许建议看一下计算机原理 和wondows操作系统原理
作者: changlang530    时间: 2007-8-16 16:36
领会领会!!
作者: zhao.nina    时间: 2007-10-24 14:16
好比用迅雷下载1个电影吧,这样你就启动了1个进程,然后迅雷会搜索资源,搜到了后就会启动好几个线程来进行下载。
作者: Tester_wu    时间: 2007-10-28 15:35
就说一下进程和线程。
一般进程被定义为一个程序运行中的实例。进程有两个部分组成:
1.系统内核对象(进程控制块)
2.运行空间(包括运行所需的代码,数据和资源,如堆和栈)
  进程是不活跃的,它只提供了一个运行环境。
线程是进程中的运行分支,它在进程提供的环境中执行代码。一个进程至少有一个线程,否则就没有存在的必要了。
线程包跨一个内核对象和一个栈。线程是cpu的调度单位。
线程是进程运行的最小单位,进程参与分配资源,如句柄,内存等,线程不参与分配。
作者: puchonghui    时间: 2007-10-28 15:57
线程和进程有很多区别的
比如说:
进程是具有独立的地址空间的,而线程只是某个进程中不同的[color=Red]执行路径[/color],线程之间没有独立的地址空间。
当一个线程崩了的时候,基本可以认为对应的进程也崩了,既然这个进程崩了,里面其他线程自然也没用了。 而某个进程崩了,通常是不应该对其他进程有影响的。

lz有兴趣可以去查阅一下相关的操作系统原理资料
作者: foxnnail    时间: 2007-10-28 17:58
学习了,第一次以注册用户查看帖子
作者: angiebyx    时间: 2007-11-10 12:44
[quote]原帖由 [i]shtina[/i] 于 2007-6-19 22:29 发表 [url=http://bbs.51testing.com/redirect.php?goto=findpost&pid=574136&ptid=8539][/url]
线程有两种,一种是占用系统资源的,叫内核支持线程,另一种是不占用系统资源的,叫用户级线程,用户级线程不依赖于内核,所以他在创建、撤销、切换的时候都不利用系统调用实现。 [/quote]


说的好
作者: merchen    时间: 2007-11-19 23:14
呵呵,俺在农村长大,还没进过城,不知道县城长啥样呢.
作者: wangxj1127    时间: 2007-11-23 15:11
标题: 回复 4# 的帖子
讲的很好,很清楚。
如果你以后出书,我一定买呵呵。有一些计算机搞的很牛的人,不一定会讲的清楚。
作者: ivyhuan    时间: 2008-1-2 15:43
线程是进程的一部分,属于进程,一个进程可以包含多个线程。
作者: Fin    时间: 2008-1-4 16:57
进程: 运行时的基本单位
线程: 调度时的基本单位
作者: xiaofei0604    时间: 2008-1-9 23:32
看完以后彻底晕了!
作者: zhulei2612022    时间: 2008-5-1 01:21
受教了 支持
作者: belie    时间: 2009-2-18 18:52
感谢分享!~
作者: lucky_pandajj    时间: 2009-6-22 16:19
终于明白了  上次去面试才遇到这个问题,谢谢
作者: whlpzmc    时间: 2009-12-4 16:14
陈年老帖,不过还是很经典,PCL老师果然很强悍!什么时候能达到你这个境界!




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2