上次在做Java中最大线程数量的测试时,对于Linux下的线程与进程的关系有点迷惑,今天看到的一篇文章简单的说明了这两者的关系:
Linux线程是通过进程来实现。Linux kernel为进程创建提供一个clone()系统调用,clone的参数包括如 CLONE_VM, CLONE_FILES, CLONE_SIGHAND 等。通过clone()的参数,新创建的进程,也称为LWP(Lightweight process)与父进程共享内存空间,文件句柄,信号处理等,从而达到创建线程相同的目的。
Linux 2.6的线程库叫NPTL(Native POSIX Thread Library)。POSIX thread(pthread)是一个编程规范,通过此规范开发的多线程程序具有良好的跨平台特性。尽管是基于进程的实现,但新版的NPTL创建线程的效率非常高。一些测试显示,基于NPTL的内核创建10万个线程只需要2秒,而没有NPTL支持的内核则需要长达15分钟。
在Linux 2.6之前,Linux kernel并没有真正的thread支持,一些thread library都是在clone()基础上的一些基于user space的封装,因此通常在信号处理、进程调度(每个进程需要一个额外的调度线程)及多线程之间同步共享资源等方面存在一定问题。为了解决这些问题,当年IBM曾经开发一套NGPT(Next Generation POSIX Threads), 效率比 LinuxThreads有明显改进,但由于NPTL的推出,NGPT也完成了相关的历史使命并停止了开发。
NPTL的实现是在kernel增加了futex(fast userspace mutex)支持用于处理线程之间的sleep与wake。futex是一种高效的对共享资源互斥访问的算法。kernel在里面起仲裁作用,但通常都由进程自行完成。
NPTL是一个1×1的线程模型,即一个线程对于一个操作系统的调度进程,优点是非常简单。而其他一些操作系统比如Solaris则是MxN的,M对应创建的线程数,N对应操作系统可以运行的实体。(N<M),优点是线程切换快,但实现稍复杂。
原文:http://timyang.net/linux/linux-process/
分享到:
相关推荐
linux unix 进程 线程linux unix 进程 线程linux unix 进程 线程linux unix 进程 线程linux unix 进程 线程linux unix 进程 线程
linux 进程和线程编程 pipe --原始管道 命名管道 消息队列 信号量 内存共享 线程编程
linux下的进程、线程
利用linux内部的一些系统调用实现线程、进程的编写。
多线程模拟进程调度多线程模拟进程调度多线程模拟进程调度多线程模拟进程调度
线程和进程的区别.txt线程和进程的区别.txt线程和进程的区别.txt线程和进程的区别.txt
消息队列在Linux线程或进程间通信中的应用.pdf
linux 进程 线程 fork 的深入思考 一道面试题的思考
PPT文档及相应C源码 linux串口编程 linux进程间通信 linux进程间通信 linux多线程编程 linux网络编程
对linux 线程进程,不错的介绍
Linux进程、线程和调度(1).pdf 进程调度学习资料共享。
Linux把所有线程都当做进程来实现。内核并没有准备特别的调度算法或者定义特别的数据结构来表示线程。下面一起来看看
非常好的课件,详细的介绍了 ◆进程概念、进程调度、进程通信和同步。 ◆ 线程定义、多线程同步及示例。 ◆ 多线程的编程方法。
介绍了linux线程同步的所有方式,包括互斥、自旋、信号量、条件变量等技术
Linux下多线程及多进程及同步与互斥编程详细介绍
在linux上分别用多进程和多线程实现的同步互斥操作(源代码)
linux系统下,C语言多线程多进程编程
Linux多线程Linux多线程Linux多线程Linux多线程Linux多线程Linux多线程Linux多线程
基础知识:线程和进程,二.Linux 2.4内核中的轻量进程实现,三.LinuxThread的线程机制,1.线程描述数据结构及实现限制,2.嵌入式linux开发教程:管理线程,3.嵌入式linux开发教程:线程栈,4.嵌入式linux开发教程:...
Linux线程,多线程编程,线程使用,线程间通讯