进程和线程的区别

  进程是资源管理的最小单位,线程是程序执行的最小单位。在操作系统设计上,从进程演化出线程,最主要的目的就是更好的支持SMP(双CPU系统,实际上是对称多处理机系统中最常见的一种)以及减小(进程/线程)上下文切换开销。

1.进程是程序的一次执行。                    线程可以理解为程序中的执行的一段程序片段。

 

2.进程间是独立的,这表现在内存空间、上下文环境上;         线程运行在进程空间内。

 

3.一般来讲,进程无法突破进程边界存取其他进程内的存储空间;而线程由于处于进程空间内,所以同一个进程所产生的线程共享同一内存空间。

 

同一进程中的两段代码不能够同时执行,除非引入线程。

 

4.线程是属于进程的,当进程退出时该进程所产生的线程都会被强制退出并清除、线程占用资源要少于进程所占用的资源、进程和线程都可以有优先级。

posted @ 2012-01-28 10:59 guoyuqiangf8 阅读(2275) 评论(16) 编辑 收藏

 回复 引用 查看   
#1楼2012-01-28 11:03 | 一条鱼~      
说的不够深刻噢
 回复 引用 查看   
#2楼[楼主]2012-01-28 11:08 | guoyuqiangf8      
那您是怎么理解的,请赐教
 回复 引用 查看   
#3楼2012-01-28 11:20 | 一条鱼~      
@guoyuqiangf8
有空可以看《现代操作系统》,里面对线程和进程的介绍比较详细,另外《windows内核原理与实现》里详细讲解了在window中线程和进程实现的具体数据结构,包括进程 ,线程如何创建,管里等,讲的很是透彻。这不是简短的语言能说清楚的哦、、呵呵,,最近我也会写一些关于进程,线程的东西,可以到博客里看。

 回复 引用 查看   
#4楼[楼主]2012-01-28 11:29 | guoyuqiangf8      
目前正在学习……不知linux下与windows下是否相同,我的发展方向是linux编程、、
 回复 引用 查看   
#5楼2012-01-28 13:42 | Stephen_Liu      
@guoyuqiangf8
如果从应用层(非内核层)来看,Linux和Windows的线程机制并没有太多的差别,但是线程同步机制在细节上还是有一定差别的,相比而言,Linux(Posix)更高效,但是Windows则的更高级。如Condition(Linux) vs Event(Win32)、Mutex(Linux) vs Mutex/CriticalSection(Win32)。

 回复 引用 查看   
#6楼2012-01-28 14:29 | 注册表      
进程是静态的,线程是动态的。进程里最少有一个线程,不然会结束。
进程优先级应该是进程里的线程相对于另一个进程的线程的绝对优先。线程优先则是相对于本进程的其它线程而言吧。

1.进程是程序的一次执行。    进程并没有执行代码,只是提供了线程运行和管理的平台。

以上只是个人观点

 回复 引用 查看   
#7楼[楼主]2012-01-28 14:41 | guoyuqiangf8      
这点说的很透彻,点醒了我,非常感谢!
 回复 引用 查看   
#8楼[楼主]2012-01-28 14:45 | guoyuqiangf8      
望广大网友多提宝贵意见,本人即刻完善该知识点,请重点说明linux环境下。
 回复 引用 查看   
#9楼[楼主]2012-01-28 14:45 | guoyuqiangf8      
@注册表
非常感谢!

 回复 引用 查看   
#10楼2012-01-28 16:44 | 清風揚諰      
任何一本操作系统的书都有的内容
 回复 引用 查看   
#11楼2012-01-28 18:15 | 无色      
在很多操作系统中,进程是不存在的。
因为进程必是一个线程,所以进程只是一个框架,和住宅建筑的框架差不多,而一个住宅建筑必包含一个及以上的房子,也可以有多个房子,共享建筑框架的设施。

1.进程是程序的一次运行。 线程可以理解为程序中的执行的一段程序片段。

没有房子的住宅建筑,不是住宅建筑,所有进程运行一次无从谈起。线程不是执行的程序片段,是有进程上下文的动态的单位。

2.进程间是独立的,这表现在内存空间、上下文环境上;线程运行在进程空间内。

进程本身不是独立的,而是通过线程来标志独立,进程本身无法访问内存空间,上下文环境上,只能通过线程来完成。线程运行在进程空间内也是不对的,进程是靠线程支撑的,进程本身没有空间,有空间也是基于线程的。

3.一般来讲,进程无法突破进程边界存取其他进程内的存储空间;而线程由于处于进程空间内,所以同一个进程所产生的线程共享同一内存空间。同一进程中的两段代码不能够同时执行,除非引入线程。

而是线程无法突破进程框架的限制来访问别的线程空间,不是进程之间的关系。线程是由线程产生的,不是由进程产生的。

没有进程的代码可以执行,任何进程需要线程。

4.线程是属于进程的,当进程退出时该进程所产生的线程都会被强制退出并清除、线程占用资源要少于进程所占用的资源、进程和线程都可以有优先级。

线程只是属于进程框架之中,不存在“进程”,进程退出实际上只是线程的退出。进程本身不占资源,占资源的都是线程,进程和线程,像航母和舰载机的关系,没有舰载机的航母就是废铁。占用的资源,优先级,可比性没有任何意义。

因为“进程”(可以看单线程框架)产生历史长,所以一直沿用至今。

进程只是平台和框架,没有线程不能运行。“进程”是伪科学,是不存在的,叫做”线程框架“更好。

把航母和舰载机,做比较没有任何意义,就像把操作系统和应用软件做比较一样。


 回复 引用 查看   
#12楼2012-01-28 18:24 | hoodlum1980      
第一句说法感觉非常主观,从何而来,令人费解。“同一进程中的两段代码不能够同时执行,除非引入线程。”这句话也很不严谨。
 回复 引用 查看   
#13楼2012-01-28 19:04 | 春风化雨9527      
讨论学习中
 回复 引用 查看   
#14楼[楼主]2012-01-28 20:56 | guoyuqiangf8      
@无色
非常感谢指点,研读中……

 回复 引用 查看   
#15楼[楼主]2012-01-28 20:59 | guoyuqiangf8      
有一种抛砖引玉的感觉…………
 回复 引用 查看   
#16楼2012-01-29 08:03 | meng0819      
都是高人啊