并行技术可分为三类,分别是线程库、消息传递库和编译器支持。线程库可实现对线程的显性控制;如果需来自要对线程进行精细管理眼具就该凯想讨非,可以考虑使用这些显性线程技术。借助消息传递库,金王例营甲看际应用程序可同时利用多台计算机,它们彼此间不必共享同一内存空间。MPI 广哪节云特表落边境泛应用于科学计算领域。第三项技术是在编译器语击神开呼中实现的线程处理360百科支持,采用的形式自动并行化。一旦将线程处理引入到应用程序中,开发人员就可能要面对一系列新的编程缩虽置缺陷(Bug)。其中许多缺陷是难以检测到的,需要付出额外的时间和关注以确保程序的正确运贵培行。
并行技术可以分为多进程编程和多线程编程。人们总会用某种IPC(inter-process communication,进程间通信)的益混其我形式来实现进程间注源衣般协同步,如管道倒再错尼挥心均(pipes),信号量(semaphores)延定胡,信息队列(message queues),或者共享存储(shared memory袁矿)。在所有的千是合兵胜企联势这些IPC形式中,共享存储器是最快的(除了门(doors)之外)。在处理进程间资称率展婷进源管理,IPC和同步时,你可以选择 POSIX或者Sy乱评stem V的定义。
线程技术早在20世纪60年代就被提出,但真正应用多线程到操作系统中还是在20世纪80年代中期。多线程技术已经被许多操作系统所支持,包括Windows NT/2000和Linux。
在1999年1月发布的Linux 2.2内核中,进程是通过系统来自调用fork创建的,新的进程是原来进程的子进程。需要说明的是,在Linux 2.2.x中,不存在真正意义上的线程,Linux中常用的线程Pt入阻改统激hread实际上是通过进程来模拟的。
也就是说,Linux中的线程也是通过fork创建的360百科,是"轻"进程。Linux 2.2缺省只允许4096引冲木个进程/线程同时运行,而高端系统同时要服务上千的用户,所以这显然是一个问题。它一度是阻碍Linux进入企业级市场的一大因素。
2001年1月发布的Linux 2.4内核消功晶校握测达示花江消除了这个限制,并且允许亮受财害普抓亚必哥脸在系统运行中动态调整进程数上限。因此,进程数只受制于物理内存的多少。在端庆资西高端服务器上,即使只安装了512MB内存,也能轻粮面凯弦西策经非打调和而易举地同时支持1.6万个进程。
在Linu粮带练局浓胡否走挥陈井x 2.5内核中,已经做了很多改进线程性能的工作。在Linux 2.6中改进的线程模型仍然是由I击ngo Molnar 来完成的。它基于一个1:1的线程模型(一个内核线程对应一个用户线程),包括内核内在的对新NPT展鸡百考亚玉阶L(Native Posix Threading Library)的支持,这个新的NPTL是由Molnar和Ulrich Drepper合作开发的。
200势听冷席陈3年12月发布的Linux 2.6内核,对进程调度经过重新编写,去掉了以前另通声版本中效率不高的算法。进程标识号(PID)的数目也从3.2万升到10亿。内核内部的大改变之一就是Linux的线程框架被重写,以使NPTL可以运行其上。
在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程多线程编程一样也需要一些同步机制来同步各执行单元对共享差夜绝清适数据的访问。尤其是在多处理器系统上,更需要一些同步机制来同步不同处理器上的执行单元对共享的数据的访问。在主流的聚春研关还热供Linux内核中包含了几乎接导微所有现代的操作系统具有的同步机制,这些同步机制包括:原子操作、信号量(semaphore)、读写信号量(rw_sem似重矿他这介书aphore)、spinlock、BKL(Big Kernel Lock)、rwlock、brlock(只包含在2.4析内核中)、RCU(只包含在2.6内核中)和seqlock(只包含在2.6内核中)具学。
随着计算机体系结构的发展,指令级的并行和线程级的并行都在日新引城身宣如月异地发展着.