并行技术是指在计算机系统中,通过同时使用多个处理器或计算资源来执行多个任务或处理多个数据集的技术。这种技术可以显著提高系统的性能和效率,尤其是在处理大规模数据和复杂计算任务时。并行技术可以分为多种类型,包括指令级并行、数据级并行、线程级并行和请求级并行等。
线程技术早在20世纪60年代就被提出,但真正应用
多线程到操作系统中还是在20世纪80年代中期。
多线程技术已经被许多操作系统所支持,包括Windows NT/2000和Linux。
在1999年1月发布的Linux 2.2
内核中,进程是通过
系统调用fork创建的,新的进程是原来进程的子进程。需要说明的是,在Linux 2.2.x中,不存在真正意义上的线程,Linux中常用的线程
Pthread实际上是通过进程来模拟的。
也就是说,Linux中的线程也是通过fork创建的,是“轻”进程。Linux 2.2缺省只允许4096个进程/线程同时运行,而高端系统同时要服务上千的用户,所以这显然是一个问题。它一度是阻碍Linux进入企业级市场的一大因素。
2001年1月发布的Linux 2.4
内核消除了这个限制,并且允许在系统运行中动态调整进程数上限。因此,进程数只受制于
物理内存的多少。在高端服务器上,即使只安装了512MB内存,也能轻而易举地同时支持1.6万个进程。
在Linux 2.5
内核中,已经做了很多改进线程性能的工作。在Linux 2.6中改进的线程模型仍然是由Ingo Molnar 来完成的。它基于一个1:1的线程模型(一个
内核线程对应一个
用户线程),包括内核内在的对新NPTL(Native Posix Threading Library)的支持,这个新的NPTL是由Molnar和Ulrich Drepper合作开发的。
2003年12月发布的Linux 2.6内核,对
进程调度经过重新编写,去掉了以前版本中效率不高的算法。进程标识号(PID)的数目也从3.2万升到10亿。内核内部的大改变之一就是Linux的线程框架被重写,以使NPTL可以运行其上。
在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象
多进程多线程编程一样也需要一些同步机制来同步各执行单元对共享数据的访问。尤其是在
多处理器系统上,更需要一些同步机制来同步不同处理器上的执行单元对共享的数据的访问。在主流的Linux内核中包含了几乎所有现代的操作系统具有的同步机制,这些同步机制包括:
原子操作、
信号量(semaphore)、读写信号量(rw_semaphore)、
spinlock、BKL(Big Kernel Lock)、rwlock、brlock(只包含在2.4内核中)、RCU(只包含在2.6内核中)和seqlock(只包含在2.6内核中)。
随着计算机体系结构的发展,指令级的并行和线程级的并行都在日新月异地发展着.