51Testing软件测试论坛
标题:
线程与进程的区别
[打印本页]
作者:
jasonxu
时间:
2007-9-25 23:43
标题:
线程与进程的区别
今天周峰老师提了一个进程与线程区别的问题,在下特地在网上搜了一下,现将结果分享如下:
简单的说,你每启动一个程序,就启动了一个进程。在Windows 3.x下,进程是最小运行单位。
在Windows 95/NT下,每个进程还可以启动几个线程,比如每下载一个文件可以单独开一个线程。
在Windows 95/NT下,线程是最小单位。WINDOWS的多任务特性使得线程之间独立运行,但是它们彼此共享虚拟空间,
也就是共用变量,线程有可能会同时操作一片内存。
线程与进程的区别
多线程共存于应用程序中是现代操作系统中的基本特征和重要标志。用过UNIX操作系统的读者知道进程,在UNIX操作系统中,
每个应用程序的执行都在操作系统内核中登记一个进程标志,操作系统根据分配的标志对应用程序的执行进行调度和系统资源分配,
但进程和线程有什么区别呢?
进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:
线程的划分尺度小于进程,使得多线程程序的并发性搞。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,
必须依存在应用程序中,由应用程序提供多个线程执行控制。
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,
来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
进程(Process)是最初定义在Unix等多用户、多任务操作系统环境下用于表示应用程序在内存环境中基本执行单元的概念。
以Unix操作系统为例,进程是Unix操作系统环境中的基本成分、是系统资源分配的基本单位。Unix操作系统中完成的几乎所有
用户管理和资源分配等工作都是通过操作系统对应用程序进程的控制来实现的。
C、C++、Java等语言编写的源程序经相应的编译器编译成可执行文件后,提交给计算机处理器运行。这时,处在可执行状态中的应用程序称为进程。
从用户角度来看,进程是应用程序的一个执行过程。从操作系统核心角度来看,进程代表的是操作系统分配的内存、CPU 时间片等资源的基本单位,
是为正在运行的程序提供的运行环境。进程与应用程序的区别在于应用程序作为一个静态文件存储在计算机系统的硬盘等存储空间中,
而进程则是处于动态条件下由操作系统维护的系统资源管理实体。多任务环境下应用程序进程的主要特点包括:
●进程在执行过程中有内存单元的初始入口点,并且进程存活过程中始终拥有独立的内存地址空间;
●进程的生存期状态包括创建、就绪、运行、阻塞和死亡等类型;
●从应用程序进程在执行过程中向CPU发出的运行指令形式不同,可以将进程的状态分为用户态和核心态。
处于用户态下的进程执行的是应用程序指令、处于核心态下的应用程序进程执行的是操作系统指令。
在Unix操作系统启动过程中,系统自动创建swapper、init等系统进程,用于管理内存资源以及对用户进程进行调度等。
在Unix环境下无论是由操作系统创建的进程还要由应用程序执行创建的进程,均拥有唯一的进程标识(PID)。
线程与进程
相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。
在串行程序基础上引入线程和进程是为了提高程序的并发度,从而提高程序运行效率和响应时间。
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。
作者:
mirro30
时间:
2007-9-26 11:09
看看,谢谢!
作者:
jiuquanzi
时间:
2007-9-26 11:27
作者:
wyalgl
时间:
2007-9-27 13:59
呵呵,晕了
作者:
huih
时间:
2007-9-27 14:12
看看,谢谢!
作者:
HAPPY_TOM
时间:
2007-10-9 22:46
咪咪
作者:
january
时间:
2007-10-10 14:32
单线程就是进程只有一个线程 。
多线程是相对于单线程而言的,指的是在一个程序中可以定义多个线程并同时执行。
每个程序执行时都会产生一个进程,而每一个进程至少要有一个主线程。这个线程就是进程执行的一条线索,除了主线程外还可以给进程增加其它的线程,也即增加其它的执行线索,由此在某种程度上可以看成是给一个应用程序增加了多任务功能。当程序运行后,可以根据各种条件挂起或运行这些线程,因为这些线程是并发运行的(其实在同一时间还是只能执行一个线程,只是给每个线程分配一个时间片,在某个时间片内,只能一个线程执行,然后按照某种策略换其他线程执行。由于时间片很短,这样给人的感觉是同时有好多线程在执行),从而使一个应用程序有了多任务的功能。如果一个进程只有一个线程,即单线程,当程序运行后,必须等这个任务结束后才能开始新的任务,因为没有结束的线程。所以如果统计代码行的程序用单线程实现的,必须等统计结束才能结束,而如果用多线程实现,除了执行的主线程外,还可以有结束的线程,这样当程序执行时,想结束就可以切换到结束的线程来结束程序。
作者:
sunting2710
时间:
2007-10-10 14:55
作者:
gaojie512
时间:
2007-10-10 15:26
学习
作者:
kaidong12
时间:
2007-10-14 22:04
标题:
回复 1# 的帖子
操作系统的书上都有降到阿
作者:
ldk0501
时间:
2007-10-14 23:50
学习啦
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2