什么是多线程和多进程

   线程和进程都是现在电脑概念里比较时髦的用语,什么是多线程,什么是多进程?本文详细的给您介绍一下,希望能增进您对当代电脑技术的了解,有不到之处,还往高手予以更正。进程(英语:Process,中国大陆译作进程,台湾译作行程)是计算机中已运行程序的实体。进程本身不会运行,是线程的容器。程序本身只是指令的集合,进程才是程序(那些指令)的真正运行。若干进程有可能与同一个程序相关系,且每个进程皆可以同步(循序)或不同步(平行)的方式独立运行。进程为现今分时系统的基本运作单位

  线程(英语:thread,台湾译为运行绪),操作系统技术中的术语,是操作系统能够进行运算调度的最小单位。它被包涵在进程之中,一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。

  线程是独立调度和分派的基本单位。线程可以操作系统内核调度的内核线程,如Win32 线程;由用户进程自行调度的用户线程,如Linux Portable Thread; 或者由内核与用户进程,如Windows 7的线程,进行混合调度。

  同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)。

  一个进程可以有很多线程,每条线程并行执行不同的任务。

  在多核或多CPU,或支持Hyper-threading的CPU上使用多线程程序设计的好处是显而易见,即提高了程序的执行吞吐率。在单CPU单核的计算机上,使用多线程技术,也可以把进程中负责IO处理、人机交互而常备阻塞的部分与密集计算的部分分开来执行,编写专门的workhorse线程执行密集计算,从而提高了程序的执行效率

  进程是资源分配的最小单位,线程是CPU调度的最小单位。线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定. 线程的运行中需要使用计算机的内存资源和CPU。

  多进程: 进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。显然,程序是死的(静态的),进程是活的(动态的)。进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程就是系统进程,它们就是处于运行状态下的操作系统本身;所有由用户启动的进程都是用户进程。进程是操作系统进行资源分配的单位。 进程又被细化为线程,也就是一个进程下有多个能独立运行的更小的单位。在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这便是多任务。现代的操作系统几乎都是多任务操作系统,能够同时管理多个进程的运行。 多任务带来的好处是明显的,比如你可以边听mp3边上网,与此同时甚至可以将下载的文档打印出来,而这些任务之间丝毫不会相互干扰。那么这里就涉及到并行的问题,俗话说,一心不能二用,这对计算机也一样,原则上一个CPU只能分配给一个进程,以便运行这个进程。我们通常使用的计算机中只有一个CPU,也就是说只有一颗心,要让它一心多用,同时运行多个进程,就必须使用并发技术。实现并发技术相当复杂,最容易理解的是“时间片轮转进程调度算法”,它的思想简单介绍如下:在操作系统的管理下,所有正在运行的进程轮流使用CPU,每个进程允许占用CPU的时间非常短(比如10毫秒),这样用户根本感觉不出来 CPU是在轮流为多个进程服务,就好象所有的进程都在不间断地运行一样。但实际上在任何一个时间内有且仅有一个进程占有CPU。 如果一台计算机有多个CPU,情况就不同了,如果进程数小于CPU数,则不同的进程可以分配给不同的CPU来运行,这样,多个进程就是真正同时运行的,这便是并行。但如果进程数大于CPU数,则仍然需要使用并发技术。 进行CPU分配是以线程为单位的,一个进程可能由多个线程组成,这时情况更加复杂,但简单地说,有如下关系:

  总线程数<= CPU数量:并行运行

  总线程数> CPU数量:并发运行

  并行运行的效率显然高于并发运行,所以在多CPU的计算机中,多任务的效率比较高。但是,如果在多CPU计算机中只运行一个进程(线程),就不能发挥多CPU的优势。 这里涉及到多任务操作系统的问题,多任务操作系统(如Windows)的基本原理是:操作系统将CPU的时间片分配给多个线程,每个线程在操作系统指定的时间片内完成(注意,这里的多个线程是分属于不同进程的).操作系统不断的从一个线程的执行切换到另一个线程的执行,如此往复,宏观上看来,就好像是多个线程在一起执行.由于这多个线程分属于不同的进程,因此在我们看来,就好像是多个进程在同时执行,这样就实现了多任务

  多线程:在计算机编程中,一个基本的概念就是同时对多个任务加以控制。许多程序设计问题都要求程序能够停下手头的工作,改为处理其他一些问题,再返回主进程。可以通过多种途径达到这个目的。最开始的时候,那些掌握机器低级语言的程序员编写一些“中断服务例程”,主进程的暂停是通过硬件级的中断实现的。尽管这是一种有用的方法,但编出的程序很难移植,由此造成了另一类的代价高昂问题。中断对那些实时性很强的任务来说是很有必要的。但对于其他许多问题,只要求将问题划分进入独立运行的程序片断中,使整个程序能更迅速地响应用户的请求。

  最开始,线程只是用于分配单个处理器的处理时间的一种工具。但假如操作系统本身支持多个处理器,那么每个线程都可分配给一个不同的处理器,真正进入“并行运算”状态。从程序设计语言的角度看,多线程操作最有价值的特性之一就是程序员不必关心到底使用了多少个处理器。程序在逻辑意义上被分割为数个线程;假如机器本身安装了多个处理器,那么程序会运行得更快,毋需作出任何特殊的调校。根据前面的论述,大家可能感觉线程处理非常简单。但必须注意一个问题:共享资源!如果有多个线程同时运行,而且它们试图访问相同的资源,就会遇到一个问题。举个例子来说,两个线程不能将信息同时发送给一台打印机。为解决这个问题,对那些可共享的资源来说(比如打印机),它们在使用期间必须进入锁定状态。所以一个线程可将资源锁定,在完成了它的任务后,再解开(释放)这个锁,使其他线程可以接着使用同样的资源。

  多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。

  一个采用了多线程技术的应用程序可以更好地利用系统资源。其主要优势在于充分利用了CPU的空闲时间片,可以用尽可能少的时间来对用户的要求做出响应,使得进程的整体运行效率得到较大提高,同时增强了应用程序的灵活性。更为重要的是,由于同一进程的所有线程是共享同一内存,所以不需要特殊的数据传送机制,不需要建立共享存储区或共享文件,从而使得不同任务之间的协调操作与运行、数据的交互、资源的分配等问题更加易于解决。


  进程间通信(IPC,Inter-Process Communication),指至少两个进程或线程间传送数据或信号的一些技术或方法。进程是计算机系统分配资源的最小单位。每个进程都有自己的一部分独立的系统资源,彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作,才有了进程间通信。这些进程可以运行在同一计算机上或网络连接的不同计算机上。

  进程间通信技术包括消息传递、同步、共享内存和远程过程调用。IPC是一种标准的Unix通信机制。

  使用IPC 的理由:

  信息共享

  加速;

  模块化;

  方便; 以及

  私有权分离.

  主要的 IPC 方法

  方法 提供方(操作系统或其他环境)

  文件 多数操作系统

  信号 多数操作系统

  Socket 多数操作系统

  消息队列(en:Message queue) 多数操作系统

  管道(en:Pipe) 所有的 POSIX systems, Windows.

  具名管道(en:Named Pipe) 所有的 POSIX 系统, Windows.

  信号量(en:Semaphore) 所有的 POSIX 系统, Windows.

  共享内存 所有的 POSIX 系统, Windows.

  Message passing(en:Message passing) 用于 MPI规范,Java RMI, CORBA, MSMQ, MailSlot 以及其他.

时间: 2025-01-21 09:46:30

什么是多线程和多进程的相关文章

深入解析PHP中的(伪)多线程与多进程

本篇文章是对PHP中的(伪)多线程与多进程进行了详细的分析介绍,需要的朋友参考下   (伪)多线程:借助外力利用WEB服务器本身的多线程来处理,从WEB服务器多次调用我们需要实现多线程的程序.QUOTE:我们知道PHP本身是不支持多线程的, 但是我们的WEB服务器是支持多线程的. 也就是说可以同时让多人一起访问. 这也是我在PHP中实现多线程的基础. 假设我们现在运行的是a.php这个文件. 但是我在程序中又请求WEB服务器运行另一个b.php 那么这两个文件将是同时执行的.(PS: 一个链接请

python-Python如何实现多线程与多进程的配合工作?

问题描述 Python如何实现多线程与多进程的配合工作? #!/usr/bin/env python #coding=utf8 import multiprocessing import threading import threadpool import time import re import os ''' 想法: 开启了11个进程,第一个进程是以多线程方式运行,再通过进程间通信来使其他进程工作. ''' def put_test(str1): # 处理出函数名,开启多线程 print s

android开发-如何理解安卓开发当中对多线程和多进程

问题描述 如何理解安卓开发当中对多线程和多进程 如何理解安卓开发当中对多线程和多进程 如何理解安卓开发当中对多线程和多进程 解决方案 线程是程序执行的最小单位,线程通讯比较简单,进程相对独立.一个程序就是一个进程,一个程序执行的时候的每个任务就是一个线程.一个进程至少有一个线程,也可以有多个线程. 解决方案二: 一个进程包含多个线程 解决方案三: 多线程 多进程应该是系统概念 跟其他环境中概念相同

PHP中的(伪)多线程与多进程

多线程|进程  已经因为没怎么需要,所以没有查这个的资料.最近有一个项目却是需要这样子的功能.     查看了PHP的手册和他人的例子,了解到基本的两种方法: (伪)多线程:借助外力    利用WEB服务器本身的多线程来处理,从WEB服务器多次调用我们需要实现多线程的程序.    以下转载自:http://www.laikan8.com/21/118472.html     QUOTE:我们知道PHP本身是不支持多线程的, 但是我们的WEB服务器是支持多线程的. 也就是说可以同时让多人一起访问.

编程思想之多线程与多进程系列(上)

什么是线程 什么是线程?线程与进程与有什么关系?这是一个非常抽象的问题,也是一个特别广的话题,涉及到非常多的知识.我不能确保能把它讲的话,也不能确保讲的内容全部都正确.即使这样,我也希望尽可能地把他讲通俗一点,讲的明白一点,因为这是个一直困扰我很久的,扑朔迷离的知识领域,希望通过我的理解揭开它一层一层神秘的面纱. 任务调度 线程是什么?要理解这个概念,须要先了解一下操作系统的一些相关概念.大部分操作系统(如Windows.Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执

深入解析PHP中的(伪)多线程与多进程_php技巧

(伪)多线程:借助外力利用WEB服务器本身的多线程来处理,从WEB服务器多次调用我们需要实现多线程的程序.QUOTE:我们知道PHP本身是不支持多线程的, 但是我们的WEB服务器是支持多线程的.也就是说可以同时让多人一起访问. 这也是我在PHP中实现多线程的基础.假设我们现在运行的是a.php这个文件. 但是我在程序中又请求WEB服务器运行另一个b.php那么这两个文件将是同时执行的.(PS: 一个链接请求发送之后, WEB服务器就会执行它, 而不管客户端是否已经退出)有些时候, 我们想运行的不

鱼还是熊掌:浅谈多进程多线程的选择

          鱼还是熊掌:浅谈多进程多线程的选择 关于多进程和多线程,教科书上最经典的一句话是"进程是资源分配的最小单位,线程是CPU调度的最小单位",这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害.   经常在网络上看到有的XDJM问"多进程好还是多线程好?"."Linux下用多进程还是多线程?"等等期望一劳永逸的问题,我只能说:没有最好,只有更好.根据实际情况来判断,哪个更加合适

qt-QT多进程和多线程区别

问题描述 QT多进程和多线程区别 5C 目前有一个项目,之前是VxWorks系统下Tornado开发的,一共四个任务.分别为采集数据.数据处理.串口传输.界面显示.现在要转换成Linux下用Qt开发.我现在已经用QT的多线程方式完成了整个项目,但是被要求用进程.那么问题来了:1:请问QT的多线程是不是可以理解成Linux下的多进程?2:如果不是,那么请问Qt下怎么进行多进程编程?进程之间的通信同步互斥什么的Qt有没有提供支持的类?还是得用Linux下的消息队列.管道.信号量什么的?3:如果有大神

并发编程下多线程多进程的应用场景

问题描述 并发编程下多线程多进程的应用场景 实现高并发程序时,多线程编程,或者多进程编程它们各自的优势是什么,即它们的应用场景, 解决方案 多线程程序可以更有效利用cpu等资源,但是线程共享相同的内存地址,所以必须严格考虑同步和数据访问的共享问题.多进程可以任意部署到单个计算机甚至多个计算机,可获得更好的伸缩性. 解决方案二: 多线程or多进程. 这主要取决于你的应用场景. 你的应用场景是否支持你使用多进程的方式.比如你的应用是需要从一个消息队列里面取出消息来快速处理,并且这些消息之间还是有相应