51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 48198|回复: 63
打印 上一主题 下一主题

什么是多线程?什么是多进程?有何区别?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2005-2-15 09:46:34 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
如题!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏

该用户从未签到

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

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

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

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

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

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

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


  如上,多线程和多任务是有很明显的区别的.但是再想一下,在一个应用程序内实现多线程不也是靠CPU分配时间片吗?既然原理是相同的,那么多线程也可以说是多任务的.

评分

参与人数 1综合技术指数 +10 收起 理由
30059 + 10

查看全部评分

回复 支持 2 反对 0

使用道具 举报

该用户从未签到

64#
发表于 2009-12-4 16:14:38 | 只看该作者
陈年老帖,不过还是很经典,PCL老师果然很强悍!什么时候能达到你这个境界!
回复 支持 反对

使用道具 举报

该用户从未签到

63#
发表于 2009-6-22 16:19:13 | 只看该作者
终于明白了  上次去面试才遇到这个问题,谢谢
回复 支持 反对

使用道具 举报

该用户从未签到

62#
发表于 2009-2-18 18:52:53 | 只看该作者
感谢分享!~
回复 支持 反对

使用道具 举报

该用户从未签到

61#
发表于 2008-5-1 01:21:15 | 只看该作者
受教了 支持
回复 支持 反对

使用道具 举报

该用户从未签到

60#
发表于 2008-1-9 23:32:10 | 只看该作者
看完以后彻底晕了!
回复 支持 反对

使用道具 举报

该用户从未签到

59#
发表于 2008-1-4 16:57:46 | 只看该作者
进程: 运行时的基本单位
线程: 调度时的基本单位
回复 支持 反对

使用道具 举报

该用户从未签到

58#
发表于 2008-1-2 15:43:47 | 只看该作者
线程是进程的一部分,属于进程,一个进程可以包含多个线程。
回复 支持 反对

使用道具 举报

该用户从未签到

57#
发表于 2007-11-23 15:11:27 | 只看该作者

回复 4# 的帖子

讲的很好,很清楚。
如果你以后出书,我一定买呵呵。有一些计算机搞的很牛的人,不一定会讲的清楚。
回复 支持 反对

使用道具 举报

该用户从未签到

56#
发表于 2007-11-19 23:14:23 | 只看该作者
呵呵,俺在农村长大,还没进过城,不知道县城长啥样呢.
回复 支持 反对

使用道具 举报

该用户从未签到

55#
发表于 2007-11-10 12:44:04 | 只看该作者
[quote]原帖由 [i]shtina[/i] 于 2007-6-19 22:29 发表 [url=http://bbs.51testing.com/redirect.php?goto=findpost&pid=574136&ptid=8539][/url]
线程有两种,一种是占用系统资源的,叫内核支持线程,另一种是不占用系统资源的,叫用户级线程,用户级线程不依赖于内核,所以他在创建、撤销、切换的时候都不利用系统调用实现。 [/quote]


说的好
回复 支持 反对

使用道具 举报

该用户从未签到

54#
发表于 2007-10-28 17:58:31 | 只看该作者
学习了,第一次以注册用户查看帖子
回复 支持 反对

使用道具 举报

  • TA的每日心情
    慵懒
    2020-8-11 08:18
  • 签到天数: 114 天

    连续签到: 1 天

    [LV.6]测试旅长

    53#
    发表于 2007-10-28 15:57:41 | 只看该作者
    线程和进程有很多区别的
    比如说:
    进程是具有独立的地址空间的,而线程只是某个进程中不同的[color=Red]执行路径[/color],线程之间没有独立的地址空间。
    当一个线程崩了的时候,基本可以认为对应的进程也崩了,既然这个进程崩了,里面其他线程自然也没用了。 而某个进程崩了,通常是不应该对其他进程有影响的。

    lz有兴趣可以去查阅一下相关的操作系统原理资料
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    52#
    发表于 2007-10-28 15:35:51 | 只看该作者
    就说一下进程和线程。
    一般进程被定义为一个程序运行中的实例。进程有两个部分组成:
    1.系统内核对象(进程控制块)
    2.运行空间(包括运行所需的代码,数据和资源,如堆和栈)
      进程是不活跃的,它只提供了一个运行环境。
    线程是进程中的运行分支,它在进程提供的环境中执行代码。一个进程至少有一个线程,否则就没有存在的必要了。
    线程包跨一个内核对象和一个栈。线程是cpu的调度单位。
    线程是进程运行的最小单位,进程参与分配资源,如句柄,内存等,线程不参与分配。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    51#
    发表于 2007-10-24 14:16:16 | 只看该作者
    好比用迅雷下载1个电影吧,这样你就启动了1个进程,然后迅雷会搜索资源,搜到了后就会启动好几个线程来进行下载。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    50#
    发表于 2007-8-16 16:36:34 | 只看该作者
    领会领会!!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    49#
    发表于 2007-8-2 15:49:27 | 只看该作者

    时间允许建议看一下计算机原理 和wondows操作系统原理

    时间允许建议看一下计算机原理 和wondows操作系统原理
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    48#
    发表于 2007-7-30 13:30:54 | 只看该作者
    学习中,印个脚印!!sdlkfj2
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    47#
    发表于 2007-7-13 21:05:53 | 只看该作者
    说的太好了!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    46#
    发表于 2007-6-19 22:29:33 | 只看该作者
    线程有两种,一种是占用系统资源的,叫内核支持线程,另一种是不占用系统资源的,叫用户级线程,用户级线程不依赖于内核,所以他在创建、撤销、切换的时候都不利用系统调用实现。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-19 15:50 , Processed in 0.090308 second(s), 30 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表