Linux与Windows线程机制简单比较
线程机制是现代编程技术中常用的一种抽象。该机制提供了在同一程序内共享内存地址空间运行的一组线程。这些线程还可以共享打开的文件和其他资源。线 程机制支持并发程序设计(concurrent programming),在多处理器系统上,它也能保证真正的并行处理(parallelism)。
Linux实现线程的机制非常独特。从内核的角度来说,它并没有线程这个概念。Linux的线程都当作进程来实现。内核并没有准备特别的调度算 法或定义特别的数据结构来表征线程。相反,线程仅仅被视为一个与其他进程共享某些资源的进程。每个线程都拥有唯一隶属于自己的task_struct,所 以在内核中,它看起来就像是一个普通的进程(只是该进程和其他一些进程共享某些资源,如地址空间)。
上述线程机制的实现与Microsoft Windows或是Sun Solaris等操作系统的实现差异非常大。这些系统都在内核中提供了专门支持线程的机制(这些系统常常把线程称作轻量级进程,lightweight process)。“轻量级进程”这种叫法本身就概括了Linux在此处与其他系统的差异。在其他的系统中,相较于重量级的进程。线程被抽象为一种耗费较 少资源、运行迅速的执行单元。而对于Linux来说,它只是一种进程间共享资源的手段(Linux的进程本身就够轻了)。举个例子来说,加入我们有一个包 含四核线程的进程,在提供专门线程支持的系统中,通常会有一个包含指向四个不同线程的指针的进程描述符。该描述符负责描述像地址空间、打开的文件这样的共 享资源。线程本身再去描述它独占的资源。相反,Linux仅仅负责创建四个进程并分配四个普通的task_struct结构。建立这四个进程是制定它们共 享某些资源就行了。
\
我们知道,Linux下没有任何关于线程的系统调用,内核对线程一无所知,用于实现多线程的,是几个线程包(LinuxThreads,pthread等 等),而Windows下,内核把线程当作调度实体,线程调度在内核内完成。而其他Unix系统,比如FreeBSD,Minix3同样是选择了在用户层 面实现多线程,而一些系统比如Solaris则使用混合方案。
记得Windows核心编程说过,Windows不存在“进程调度”,只有“线程调度”,这是最基本的调度方式(Windows下,任何一个进程都至少有一个线程,main函数会自动成为主线程的函数),这一点是和Linux下以“进程”为调度单位最大的不同。
其实,看线程效率绝不能孤立地看线程模型,要看整个系统,在Windows下,gui是在内核态运行的(参见Windows Internals),Linux下gui是用户态,那么对于gui程序的线程来说,Windows下的内核态线程似乎更适合。
请教:Linux中进程和线程 Windows中的进程和线程有区别吗?
(2012-06-06 23:33:15)转载▼
标签: windowslinux杂谈 |
Linux中进程和线程 Windows中的进程和线程有区别吗?
让你说出 哪一个是运行在用户态,哪一个是运行在内核状态?
小弟一直用的Linux,在Windows下仅仅是上qq,看电影。
请高手说说:)
谢谢了Linux中进程和线程区别不是很大,只是调用clone时的参数不同而已
windows中进程和线程区别好像比较大,进程比线程更加庞大。我他娘的也被问过这个问题,当时觉得是对我智商的侮辱,可细一想,或许这是个套。
对于linux kernel本身,线程只是指的若干个进程串在一个链里,这个链有一个thread group id。链里的进程,与不在链里的进程,行为差异只表现在:
1) 接收到引起exit的信号时,接收到信号的进程,会把这个信号转发给thread group里的所有进程。
2) 进程在wait时,可以wait链里所有进程的子进程。
对于glibc,创建线程时,指定了一个更为重要的参数,clone_vm,既孩子与父亲共享虚拟地址空间。这个是线程和进程的最重要区别,但这并不是linux实现的,而是glibc实现的。
我觉得考官在考虑这个问题时,也很可能并不是想听到这个答案,他需要的只是简单的共享内存。但linux kernel里规定的线程,并没说一定要共享内存。你可以和考官叫叫板。当时比较冲,已经意识到这个问题上有题目可以做,但是没总结过,也一时半会说不好。于是说了两句后,直接说不懂了的。原帖由 motalelf 于 2008-4-23 23:16 发表 http://bbs.chinaunix.net/images/common/back.gif
我他娘的也被问过这个问题,当时觉得是对我智商的侮辱,可细一想,或许这是个套。
对于linux kernel本身,线程只是指的若干个进程串在一个链里,这个链有一个thread group id。链里的进程,与不在链里的进 ...
请教:
线程和进程的本身的实现是在内核中还是在用户空间?还是两者都有?原帖由 rocky1972 于 2008-4-24 08:09 发表 http://bbs.chinaunix.net/images/common/back.gif
请教http://www.mhxjj.com/:
线程和进程http://www.555119.com/的本身的实现是在内核中还是在用户空间?还是两者都有?
win7安装使用openvpn所遇到的问题/>我试着解释一下, 如果不对, 请大家指正:
因为任何os的进程或者thread都是基于cpu的支持的, 我了解目前的cpu是支持process调度跟thread调度的。
linux 2.4.n版本前, thead是用户及的, 比较慢, 但在2.4的某个版本后, 修改为kernel 及的了, 所以现 的windows /linux的thread
都是kernel 及的。
但他们是有区别的, 区别就是linux的kernel level thread 是按进程调度的,
而windows 下的thread 是按thread 调度的。。。 所以linux下的thread 没有 windows下的thread 效能好。回复 #1 rocky1972 的帖子推荐看《modern operating system》中线程的不同实现方式原帖由 ypxing 于 2008-4-24 10:15 发表 http://bbs.chinaunix.net/images/common/back.gif
推荐看《modern operating system》中线程的不同实现方式
能否简单的概述一下?
谢谢,手头暂时找不到您说的这本书。原帖由 motalelf 于 2008-4-23 23:16 发表 http://bbs.chinaunix.net/images/common/back.gif
我他娘的也被问过这个问题,当时觉得是对我智商的侮辱,可细一想,或许这是个套。
对于linux kernel本身,线程只是指的若干个进程串在一个链里,这个链有一个thread group id。链里的进程,与不在链里的进 ...
但linux kernel里规定的线程,并没说一定要共享内存
那还叫线程吗?CU上的朋友基本上都是在UNIX平台上搞,那就说说UNIX平台下的进程和线程是运行在内核空间还是用户空间?
先谢过了。