上次在做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下的进程、线程
在Linux操作系统中,多线程模拟进程调度是一个深入理解操作系统内核和并发编程的重要主题。进程调度是操作系统核心的关键组成部分,负责决定哪个进程应该获得CPU的执行权,以及何时进行切换。而通过多线程模拟进程...
在Linux和Unix操作系统中,进程和线程是两种基本的执行单元,它们是系统资源管理和任务调度的基础。本文将深入探讨这两个概念,以及它们在实际应用中的差异和交互。 一、进程 进程是操作系统中一个独立的执行实体,...
利用linux内部的一些系统调用实现线程、进程的编写。
内核线程和进程的区别主要体现在它们在Linux操作系统中的实现机制和运行方式。首先需要理解的是,在Linux系统中,线程被抽象为一种特殊的进程,称为轻量级进程(Lightweight Process, LWP)。这种机制与传统的线程...
在Linux操作系统中,线程和进程是两个基本的执行单元,它们在系统设计中起着至关重要的作用。根据定义,进程是系统管理资源的基本单位,它拥有独立的内存空间和资源,而线程则是程序执行的最小单位,共享同一进程的...
Linux作为一个多用户多任务的现代操作系统,其进程和线程的管理是系统设计的重要组成部分。在Linux中,进程管理涉及进程的创建、执行、状态转换和退出等,而线程作为一种轻量级的进程,为程序并发执行提供了条件。...
在Linux操作系统中,进程和线程是两个核心概念,它们是程序执行的载体。本教程“linux 进程线程小程序”将深入探讨这两个概念,以及如何利用信号量、管道和共享内存进行进程间的通信。 首先,让我们了解什么是进程...
### Linux 下进程、线程与 fork 的深入理解 #### 题目背景及解析 本篇文章将基于一道经典的面试题目来探讨 Linux 下进程创建机制,特别是 `fork` 函数的工作原理。该题目不仅考验应试者对进程创建的理解,还涉及了...
在Linux环境下,理解并熟练掌握串口通信、多线程、进程以及网络编程是非常重要的技能。以下是对这些知识点的详细解释。 首先,**Linux串口编程**是指通过计算机的串行端口进行数据传输。串口通信常用于设备间的低速...
在Linux操作系统中,线程是进程内的执行单元,可以并发执行任务,提高系统资源利用率。在某些场景下,我们可能需要挂起线程以暂停其执行,或者恢复线程以继续其工作。本文将深入探讨如何在Linux环境下挂起和恢复线程...
本文主要讨论了Linux操作系统下多线程和多进程的性能分析。在Linux系统中,使用多进程处理多个任务,会占用很多系统资源(主要是CPU和内存的使用)。因此,Linux系统对这种弊端进行了改进,在用户态实现了多线程处理...
消息队列是Linux操作系统中用于线程和进程间通信的一种重要机制。它提供了一种可靠的数据传递方式,克服了其他通信方式的一些局限,如信号传递信息量有限、管道数据流无格式、缓冲区大小固定等问题。消息队列实质上...
在Linux操作系统中,多进程和多线程是两种并发执行的方式,它们在处理并发问题时,经常需要进行同步和互斥操作,以确保数据的一致性和程序的正确性。本篇将详细介绍这两种并发模型以及如何在Linux环境中实现同步互斥...
在多线程编程中,Linux面临着兼容性和效率的问题。线程作为程序执行的最小单位,是为了更好地支持对称多处理器(SMP)系统和降低上下文切换的开销。 线程与进程的区别在于,进程是操作系统资源管理的基本单位,负责...
操作系统实验报告——线程与进程同步,主要探讨了在Linux环境下如何实现进程和线程的同步,以解决经典的生产者-消费者问题。该实验旨在帮助学生掌握操作系统提供的同步机制,并深化对经典同步问题的理解。 实验内容...
在Linux操作系统中,进程间通信(IPC,Inter-Process Communication)和多线程编程是实现高效并发处理的关键技术。本文将深入探讨这两种技术,并结合"全双工邮箱通讯"的源码实例,来阐述如何利用它们实现数据交换。 ...
嵌入式Linux开发教程深入探讨了进程与线程的概念及其在操作系统中的实现,这对于理解和开发高效、并发的嵌入式应用程序至关重要。以下是这些知识点的详细解释: **一、基础知识:线程和进程** 1. **进程**:是操作...
在编程领域,多线程和多进程是提升应用程序性能和响应速度的重要手段。Qt库,一个跨平台的应用程序开发框架,提供了丰富的API来支持线程和进程间的通信。本实例将深入探讨Qt如何实现线程间通信以及线程与进程间通信...