LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3452|回复: 14

进程和线程区别是什么?

[复制链接]
发表于 2004-2-9 11:14:50 | 显示全部楼层 |阅读模式
我想知道线程和进程的区别,不知道哪位大侠对此有研究。请指教!
请尽可能详细一些。(我指的不是那个好,哪个坏)
发表于 2004-2-9 11:29:33 | 显示全部楼层
很详细就难了
内存分配上就是堆栈和堆的区别

在宏观理解上,一个进程是运行在内存中程序的一份拷贝
一个进程可以拥有多个线程。
线程是进程并行完成的多个任务。

一般来说,一个进程耗费的内存更多,进程崩溃的影响也更大。
所以有进程安全的说法。
CGI程序就是用进程管理的,服务器为每个request都开一个进程。
所以CGI程序是“进程不安全”的。

JSP 这样的程序对每个request都只是开个线程而已,性能和安全性方面更加优秀。

不知道这样说你能否理解。
发表于 2004-2-9 11:29:36 | 显示全部楼层
很详细就难了
内存分配上就是堆栈和堆的区别

在宏观理解上,一个进程是运行在内存中程序的一份拷贝
一个进程可以拥有多个线程。
线程是进程并行完成的多个任务。

一般来说,一个进程耗费的内存更多,进程崩溃的影响也更大。
所以有进程安全的说法。
CGI程序就是用进程管理的,服务器为每个request都开一个进程。
所以CGI程序是“进程不安全”的。

JSP 这样的程序对每个request都只是开个线程而已,性能和安全性方面更加优秀。

不知道这样说你能否理解。
 楼主| 发表于 2004-2-9 12:08:06 | 显示全部楼层

我的理解,请指正!

我对你的解释的理解是:进程比较重,而线程比较轻。
                      线程比进程要安全(对于系统来说)
但是,进程在工作的时候可以共享内存。这就可能造成不同线程间的错误使用数据。从而造成程序执行的失败!那对于单个程序来说,是不是线程比较不安全?
发表于 2004-2-9 13:19:16 | 显示全部楼层
发表于 2004-2-9 14:25:11 | 显示全部楼层
进程是线程的容器。
发表于 2004-2-9 17:07:50 | 显示全部楼层

回复: 我的理解,请指正!

最初由 leonchen_mail 发表
我对你的解释的理解是:进程比较重,而线程比较轻。
                      线程比进程要安全(对于系统来说)
但是,进程在工作的时候可以共享内存。这就可能造成不同线程间的错误使用数据。从而造成程序执行的失败!那对于单个程序来说,是不是线程比较不安全?


呵呵,有点不对。

线程如果崩溃,只会影响到当前的进程;
进程的崩溃可能会影响到其他程序。
所以,是进程不大安全。

另外,说进程是线程的容器,感觉上是差不多的。
线程使用的内存都是从进程中分配的。

比如,我用浏览器打开了 linuxsir 这个网站。
浏览器会开一个进程(有的浏览器也可以只开线程)来连接这个网站。
由于网页上有很多“资源”(图片、文字什么的),所以浏览器在这个进程中会开几个线程同时下载这些“资源”。

如果资源下载失败,也只不过影响这个页面而已。
但是如果浏览器崩溃了,很可能影响到系统的其他软件。
想一下,如果 windows 系统的 IE 崩溃了会有什么效果?大概要重启了吧,哈。
发表于 2004-2-9 19:08:51 | 显示全部楼层
最初由 goldeagle 发表
很详细就难了
内存分配上就是堆栈和堆的区别

在宏观理解上,一个进程是运行在内存中程序的一份拷贝
一个进程可以拥有多个线程。
线程是进程并行完成的多个任务。

一般来说,一个进程耗费的内存更多,进程崩溃的影响也更大。
所以有进程安全的说法。
CGI程序就是用进程管理的,服务器为每个request都开一个进程。
所以CGI程序是“进程不安全”的。

JSP 这样的程序对每个request都只是开个线程而已,性能和安全性方面更加优秀。

不知道这样说你能否理解。

说得不完全正确,进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。如果有兴趣深入的话,我建议你们看看《现代操作系统》或者《操作系统的设计与实现》。对就个问题说得比较清楚。
发表于 2004-2-10 09:52:47 | 显示全部楼层
最初由 kj501 发表
说得不完全正确,进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。如果有兴趣深入的话,我建议你们看看《现代操作系统》或者《操作系统的设计与实现》。对就个问题说得比较清楚。


呵呵,我们说的着眼点有点不同。
我说的是“安全”,你说的是“健壮”。
这个是有区别的。

我为什么用 CGI 举例就是这个原因啦。

另外,现在线程也是可以 LOCK TO DIE 的,多线程已经能够将崩溃的影响限定在比较小的范围内了。

不过,象管理 GUI 事件相应这样功能的线程,还无法很好的 LOCK TO DIE,而且也无法 UNLOCK TO LIVE。

这个应该不属于楼主的问题所需要考虑的范围了
发表于 2004-2-11 17:10:26 | 显示全部楼层

回复: 回复: 我的理解,请指正!

最初由 goldeagle 发表
呵呵,有点不对。

线程如果崩溃,只会影响到当前的进程;
进程的崩溃可能会影响到其他程序。
所以,是进程不大安全。

另外,说进程是线程的容器,感觉上是差不多的。
线程使用的内存都是从进程中分配的。

比如,我用浏览器打开了 linuxsir 这个网站。
浏览器会开一个进程(有的浏览器也可以只开线程)来连接这个网站。
由于网页上有很多“资源”(图片、文字什么的),所以浏览器在这个进程中会开几个线程同时下载这些“资源”。

如果资源下载失败,也只不过影响这个页面而已。
但是如果浏览器崩溃了,很可能影响到系统的其他软件。
想一下,如果 windows 系统的 IE 崩溃了会有什么效果?大概要重启了吧,哈。


理论上说,在 Windows NT/2000 中一个用户进程崩溃掉并不会导致系统的死掉吧。Windows 98 系统里没有用户进程的概念,一个普通进程的崩溃就会导致系统灾难。
对于 Mozilla/Opera 这样的多线程浏览器,是对于每一个标签页打开一个线程吧?请指教。:thank
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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