当前位置: 技术问答>linux和unix
线程和进程有什么具体的区别?谁能解释一下,用实例亦可
来源: 互联网 发布时间:2015-04-22
本文导语: 各位,大家帮忙讨论一下 | 进程是一个单独的运行的程序,有自己的进程控制块和内核虚拟空间 线程是进程内部不同的执行路径,它们共享进程的各种资源(例如CPU时间,打开的文件,内存里...
各位,大家帮忙讨论一下
|
进程是一个单独的运行的程序,有自己的进程控制块和内核虚拟空间
线程是进程内部不同的执行路径,它们共享进程的各种资源(例如CPU时间,打开的文件,内存里的存储数据)
进程一般都有很强的保护机制,也就是说,两个进程之间要通信,需要费一些周折,要求操作系统提供一些服务。如果直接去侵犯人家的地盘,操作系统会报错。(例如Windows下两个程序打开同一个文件,前一个进程如果要求独自占领,系统会提醒后一个进程不行)不同电脑甚至操作系统的进程都是有办法通讯的(SOCKET就是干这个的)
线程之间的关系就简单很多,所有的临界区(也就是多个线程都要用的资源)的使用都要程序员自己调整好,否则会出现并行错误,虽然有各种协调机制,例如Windows下线程就也有一些保护机制,但是编程还是需要考虑很多,当然,运行效率高一些。线程一般都是本地概念。
具体linux下的编程,可以参考
http://www.joyfire.net/jln/system/11.html
linux内核下如何实现进程线程问题,可以参考
http://www.joyfire.net/jln/kernel/4.html
顺便提示一下,linux内核是用进程机制来模拟线程的,也就是给两个进程相同的进程号
这样他们就可以直接访问对方的资源,而系统把它们当作一个进程
欢迎访问 http://joyfire.net
线程是进程内部不同的执行路径,它们共享进程的各种资源(例如CPU时间,打开的文件,内存里的存储数据)
进程一般都有很强的保护机制,也就是说,两个进程之间要通信,需要费一些周折,要求操作系统提供一些服务。如果直接去侵犯人家的地盘,操作系统会报错。(例如Windows下两个程序打开同一个文件,前一个进程如果要求独自占领,系统会提醒后一个进程不行)不同电脑甚至操作系统的进程都是有办法通讯的(SOCKET就是干这个的)
线程之间的关系就简单很多,所有的临界区(也就是多个线程都要用的资源)的使用都要程序员自己调整好,否则会出现并行错误,虽然有各种协调机制,例如Windows下线程就也有一些保护机制,但是编程还是需要考虑很多,当然,运行效率高一些。线程一般都是本地概念。
具体linux下的编程,可以参考
http://www.joyfire.net/jln/system/11.html
linux内核下如何实现进程线程问题,可以参考
http://www.joyfire.net/jln/kernel/4.html
顺便提示一下,linux内核是用进程机制来模拟线程的,也就是给两个进程相同的进程号
这样他们就可以直接访问对方的资源,而系统把它们当作一个进程
欢迎访问 http://joyfire.net
|
进程是 Linux 和 Windows 中的可执行程序。按约定,在 Windows 上,文件名中带 .exe 扩展名(后缀)的文件是可执行文件。进程是通过编译源文件并执行来生成的。进程可以继承打开的文件句柄。在 Windows 中,这个句柄值值得怀疑,因为句柄不是小整数。在 Windows 中,没有关于为已打开的文件将句柄初始化为合适值这一过程的记录(我所知道的)。在 Linux 中,将文件描述符设置为值 20,然后使用这个描述符,这相当容易。要这样做只需在正执行的和已执行的程序之间存在一个协议。
线程是执行上下文。最初每个进程都只有一个执行上下文。这个执行上下文称为线程。如果进程需要另一个执行上下文,那么它只要创建另一个进程。但是,就处理器的周期和内存的使用而言,进程创建的开销是很大的。发明线程是为创建多个执行上下文提供轻量级的机制。Windows 和 Linux 从操作系统上调度线程的目标是提供一个公平的执行环境。
进程和线程之间的最大区别是一个进程的所有线程共享同一个内存空间并共享系统定义的“资源”。这些资源包括打开的文件句柄(文件描述符)、共享内存、进程同步原语和当前目录。因为共享全局内存并且几乎不必分配新内存,所以创建线程比创建进程更简单更快。
线程是执行上下文。最初每个进程都只有一个执行上下文。这个执行上下文称为线程。如果进程需要另一个执行上下文,那么它只要创建另一个进程。但是,就处理器的周期和内存的使用而言,进程创建的开销是很大的。发明线程是为创建多个执行上下文提供轻量级的机制。Windows 和 Linux 从操作系统上调度线程的目标是提供一个公平的执行环境。
进程和线程之间的最大区别是一个进程的所有线程共享同一个内存空间并共享系统定义的“资源”。这些资源包括打开的文件句柄(文件描述符)、共享内存、进程同步原语和当前目录。因为共享全局内存并且几乎不必分配新内存,所以创建线程比创建进程更简单更快。
|
网络蚂蚁在运行:一个进程在运行
5线程下载 :5个线程在网络蚂蚁这个进程中被启动
5线程下载 :5个线程在网络蚂蚁这个进程中被启动
|
简单的说,你每启动一个程序,就启动了一个进程。
在Windows 3.x下,进程是最小运行单位。
在Windows 95/NT下,每个进程还可以启动几个线程,比如每下载一个文件可以单独开一个线程。在Windows 95/NT下,线程是最小单位。WINDOWS的多任务特性使得线程之间独立运行,但是它们彼此共享虚拟空间,也就是共用变量,线程有可能会同时操作一片内存。
在Windows 3.x下,进程是最小运行单位。
在Windows 95/NT下,每个进程还可以启动几个线程,比如每下载一个文件可以单独开一个线程。在Windows 95/NT下,线程是最小单位。WINDOWS的多任务特性使得线程之间独立运行,但是它们彼此共享虚拟空间,也就是共用变量,线程有可能会同时操作一片内存。
|
一个进程可以包含多个线程
|
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反
|
up