什么是多线程和多重处理?
线程和进程都是计算机概念中的时髦术语。什么是多线程,什么是多重处理?这篇文章给你做了详细的介绍,希望能增进你对当代计算机技术的了解,并纠正任何不足之处。进程(英文:Process,中国大陆译,台湾省译)是在计算机中运行程序的实体。进程本身不运行,是线程的容器。程序本身只是指令的集合,进程才是程序(那些指令)真正的运行。几个进程可能与同一个程序相关,每个进程可以以同步(顺序)或异步(并行)的方式独立运行。进程是当今分时系统中的基本操作单元线程(英文:thread,译自台湾省)。作为操作系统技术中的一个术语,它是操作系统可以调度操作的最小单位。它包含在流程中。线程是指流程中控制流的单个序列。一个进程可以同时有多个线程,每个线程并行执行不同的任务。在Unix System V和SunOS中,也称为轻量级进程,但轻量级进程将内核线程和用户线程称为线程。线程是独立调度和分派的基本单位。线程可以是由操作系统内核调度的内核线程,例如Win32线程;用户进程自己调度的用户线程,比如Linux可移植线程;或者混合内核和用户进程(如Windows 7线程)进行调度。同一个进程中的多个线程会享用进程中的所有系统资源,比如虚拟地址空间、文件描述符、信号处理等。但是,同一进程中的多个线程有自己的调用堆栈、自己的寄存器上下文和自己的线程本地存储。一个进程可以有许多线程,每个线程并行执行不同的任务。在多核或多CPU或支持超线程的CPU上使用多线程编程的优势是显而易见的,即提高了程序的执行吞吐量。在单CPU单内核的计算机上,利用多线程技术,还可以将负责IO处理和人机交互的部分从密集型计算的部分中分离出来,编写专门的workhorse线程进行密集型计算,从而提高程序的执行效率。进程是资源分配的最小单位,线程是CPU调度的最小单位。线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程共享数据空间,每个线程都有自己的执行堆栈和程序计数器作为其执行上下文。多线程主要是节省CPU时间,充分利用,具体情况而定。线程的运行需要使用计算机内存资源和CPU。多进程:进程是一个程序在计算机上的执行活动。当你运行一个程序时,你启动了一个进程。很明显,程序是死的(静态),流程是活的(动态)。进程可以分为系统进程和用户进程。所有用来完成操作系统各种功能的进程都是系统进程,是运行状态下的操作系统本身;所有由用户启动的进程都是用户进程。进程是操作系统分配资源的单位。进程被细分为线程,也就是说,有许多更小的单元可以在一个进程下独立运行。同时,如果允许两个或两个以上的进程在同一个计算机系统中运行,这就是多任务处理。现代操作系统几乎都是多任务操作系统,可以同时管理多个进程的运行。多任务处理的好处显而易见。比如你可以一边听mp3一边上网,同时你甚至可以把下载的文档打印出来,这些任务之间没有任何干扰。那么这里就涉及到并行的问题了。俗话说,不能一心二用,电脑也是一样。原则上,一个CPU只能分配给一个进程来运行这个进程。我们平时用的电脑只有一个CPU,也就是说,只有一颗心。要使其一机多用,同时运行多个进程,就必须使用并发技术。并发技术的实现相当复杂,最容易理解的就是“时间片轮换进程调度算法”。其思想简单介绍如下:在操作系统的管理下,所有正在运行的进程轮流使用CPU,并且允许每个进程占用CPU的时间非常短(例如10毫秒),这样用户就根本感觉不到CPU在轮流为多个进程服务,就好像所有进程都在连续运行一样。但实际上,任何时候都只有一个进程占用CPU。如果一台计算机有多个CPU,情况就不一样了。如果进程的数量少于CPU的数量,可以将不同的进程分配给不同的CPU运行,这样就真正做到了多个进程同时运行,这就是并行。但是如果进程数大于CPU数,还是需要使用并发技术。CPU分配是基于线程的,一个进程可能由多个线程组成。这个时候情况就比较复杂了,但是简单来说,有如下关系:线程总数,CPU数量:并发运行的效率明显高于并发运行的效率,所以在多CPU的计算机中,多任务的效率更高。但是,如果在多CPU的计算机中只有一个进程(线程)在运行,多CPU的优势就无法发挥出来。这就涉及到多任务操作系统的问题。多任务操作系统(如Windows)的基本原理是操作系统将CPU的时间片分配给多个线程,每个线程在操作系统指定的时间片内完成(注意这里的多个线程属于不同的进程)。操作系统不断地从一个线程的执行切换到另一个线程的执行,以此类推。就像多个线程一起执行。由于这些线程属于不同的进程,在我们看来就是多个进程在同时执行,从而实现了多任务多线程:在计算机编程中,一个基本的概念就是同时控制多个任务。许多编程问题要求程序停止正在做的事情,转而处理其他问题,然后返回主进程。这可以通过多种方式实现。当初掌握机器底层语言的程序员编写了一些“中断服务例程”,主进程的暂停是通过硬件级中断来实现的。虽然这是一种有用的方法,但编译的程序很难移植,这就造成了另一种昂贵的问题。对于那些实时任务,中断是必要的。而对于其他很多问题,只要求把问题分成独立的程序片段,让整个程序更快的响应用户的请求。起初,线程只是一种分配单个处理器处理时间的工具。但如果操作系统本身支持多处理器,那么每个线程都可以分配到不同的处理器上,就真正进入了“并行运行”的状态。从编程语言的角度来看,多线程操作最有价值的一个特点就是程序员不用关心用了多少个处理器。程序在逻辑上分为几个线程;如果机器本身配备了多个处理器,程序运行速度会更快,不需要任何特殊调整。根据前面的讨论,你可能觉得线程化很简单。但是一定要注意一个问题:* *享受资源!如果有多个线程同时运行,并且它们试图访问相同的资源,您将会遇到一个问题。例如,两个线程不能同时向打印机发送信息。为了解决这个问题,对于那些可以享用的资源(比如打印机),在使用过程中必须进入锁定状态。因此,一个线程可以锁定资源,然后在完成任务后解锁(释放)该锁,以便其他线程可以使用相同的资源。多线程是同时完成多个任务,不是为了提高运行效率,而是为了提高资源使用效率,提高系统的效率。当需要同时完成多个任务时,就实现了线程。采用多线程技术的应用程序可以更好地利用系统资源。它的主要优点是充分利用了CPU的空闲时间片,能够在尽可能短的时间内响应用户的需求,大大提高了进程的整体运行效率,增强了应用程序的灵活性。更重要的是,由于同一个进程中的所有线程共享同一个内存,所以不需要专门的数据传输机制,也不需要建立* * *共享存储区或者* * *共享文件,更容易解决不同任务之间的协同操作和操作、数据交互、资源分配等问题。进程间通信(IPC)是指在至少两个进程或线程之间传输数据或信号的一些技术或方法。进程是计算机系统分配资源的最小单位。每个进程都有自己的一部分独立的系统资源,彼此隔离。为了使不同的进程访问资源并协调它们的工作,就有了进程间通信。这些进程可以在同一台计算机上运行,也可以在连接到网络的不同计算机上运行。进程间通信技术包括消息传递、同步、内存共享和远程过程调用。