찾다
백엔드 개발파이썬 튜토리얼线程和进程的区别及Python代码实例

在程序猿的世界中,线程和进程是一个很重要的概念,很多人经常弄不清线程和进程到底是什么,有什么区别,本文试图来解释一下线程和进程。首先来看一下概念:

进程(英语:process),是计算机中已运行程序的实体。进程为曾经是分时系统的基本运作单位。在面向进程设计的系统(如早期的UNIX,Linux 2.4及更早的版本)中,进程是程序的基本执行实体;在面向线程设计的系统(如当代多数操作系统、Linux 2.6及更新的版本)中,进程本身不是基本运行单位,而是线程的容器。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。–维基百科

线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。–维基百科

概念太吓人了,先来看一下进程,这个相对于线程来说还是稍微好理解一点的。进程,是程序运行的实体,这句话的意思是,程序是存放在硬盘中的,当这个程序运行时,就会产生若干个进程,并且这个进程是可见的,在windows8的任务管理器中,我们看到有下列进程:

那么什么是线程呢?如果你编写过程序,特别是类似windows的批处理这样的逻辑控制语句少的语言,就能明显感觉到,当运行一个程序是,实际上整个运行的过程是从头部一直运行到尾部。例如有这样一段批处理的代码,提示用户输入姓名,然后根据姓名输出问候:

@echo off
set /p name=请输入您的姓名: 
cls
echo 你好,%name
pause

这段小程序就是自上而下执行,执行完毕则退出。不管是批处理,像PHP,Node.JS等都是这样自上而下执行的。实际上这就是一个线程,可以这样去理解:线程是一个任务流,它被包含在进程之中。有个例子:

5月1号这一天,麦当劳生意比较火爆,人很多,前台有6个窗口,有4个窗口在工作,随着要吃饭的人变多,麦当劳不得不开放了剩余的两个窗口。在这里,每一个窗口就是一个进程,处理卖垃圾食品这样一个任务,让系统需要处理更多请求时候,开放窗口就是增加进程来处理需求。由于是假期,发现即使是6个窗口全开了,排队的客户还是很多,那么,这里是不是没有其它的办法了呢?效率都是逼出来的,经理发现,客户买完东西,在旁边等,当客户的汉堡(或者其它垃圾食品)准备好了,是由单独的一个人(小明)把食品递给客户,由于这个人需要把准备好的食物分别送给6个不同窗口的客户,所以效率很低。这时候经理发话了,食品准备好了,直接由窗口的售卖人员把食品给正在等在的客户,这样比较节省时间。在这里,前台售卖人员的工作就有原来的一项专门售卖商品的工作,变成了两项,就是两个进程。

进上总结,一个进程中至少有一个线程,在实际的工作中,不是所有的程序都支持多线程,也有一些程序对多进程也支持得不够好,像PHP,Node.js等都是单进程,单线程的。

下面这个python的脚本让一个进程中运行两个线程:

import time 
import thread 
def Ordering(interval): 
  cnt = 0 
  while cnt<100: 
    print '好了,你订餐成功,订餐号码是:%d号 订餐时间是:%s 请在旁边耐心等待\n\n'%(cnt, time.ctime()) 
    time.sleep(interval) 
    cnt+=1 
  thread.exit_thread() 
def Notice(interval): 
  cnt = 0 
  while cnt<100: 
    print '谁的号码是%d,您的餐好了,过来取一下\n'%(cnt) 
    time.sleep(interval) 
    cnt+=1 
  thread.exit_thread()  
  
def work(): #Use thread.start_new_thread() to create 2 new threads 
  thread.start_new_thread(Ordering,(1,)) 
  thread.start_new_thread(Notice,(5,)) 
  
if __name__=='__main__': 
  work()

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
8核16线程是什么意思?8核16线程是什么意思?Feb 02, 2023 am 11:26 AM

8核是指CPU有8颗物理核心,16线程是指CPU最多同时可以有16个线程处理任务。核心数和线程数是电脑CPU的重要性能指标,CPU的核心数越高处理速度就越高;线程数越多越有利于同时运行多个程序,因为线程数等同于在某个瞬间CPU能同时并行处理的任务数。多线程可最大限度地实现宽发射、乱序的超标量处理,提高处理器运算部件的利用率,缓和由于数据相关或Cache未命中带来的访问内存延时。

Java错误:JavaFX线程卡顿错误,如何处理和避免Java错误:JavaFX线程卡顿错误,如何处理和避免Jun 24, 2023 pm 05:52 PM

在进行JavaFX应用程序开发的过程中,我们常常会遇到JavaFX线程卡顿错误。这种错误的严重程度不同,可能会对程序的稳定性和性能产生不利的影响。为了保证程序的正常运行,我们需要了解JavaFX线程卡顿错误的原因和解决方法,以及如何预防这种错误的发生。一、JavaFX线程卡顿错误的原因JavaFX是一个多线程的UI应用程序框架,它允许程序在后台线程中执行长时

什么是程序运行时指令流的最小单位什么是程序运行时指令流的最小单位Aug 23, 2022 pm 02:16 PM

“线程”是程序运行时指令流的最小单位。进程是指一个具有一定独立功能的程序,而线程是进程的一部分,描述指令流执行状态;线程是进程中的指令执行流的最小单位,是CPU调度的基本单位。一个线程是一个任务(一个程序段)的一次执行过程;线程不占有内存空间,它包括在进程的内存空间中。在同一个进程内,多个线程共享进程的资源;一个进程至少有一个线程。

Go语言中线程和进程的区别解析Go语言中线程和进程的区别解析Apr 03, 2024 pm 01:39 PM

Go语言中的进程和线程:进程:独立运行的程序实例,拥有自己的资源和地址空间。线程:进程内的执行单元,共享进程资源和地址空间。特点:进程:开销大,隔离性好,独立调度。线程:开销小,共享资源,内部调度。实战案例:进程:隔离长时间运行的任务。线程:并发处理大量数据。

go语言中协程与线程的区别是什么go语言中协程与线程的区别是什么Feb 02, 2023 pm 06:10 PM

区别:1、一个线程可以多个协程,一个进程也可以单独拥有多个协程;2、线程是同步机制,而协程则是异步;3、协程能保留上一次调用时的状态,线程不行;4、线程是抢占式,协程是非抢占式的;5、线程是被分割的CPU资源,协程是组织好的代码流程,协程需要线程来承载运行。

Microsoft计划在Windows上的Outlook经典应用程序中引入AI驱动的CopilotMicrosoft计划在Windows上的Outlook经典应用程序中引入AI驱动的CopilotOct 19, 2023 pm 11:13 PM

Microsoft显然不会将其强大的人工智能支持的Copilot工具保留为新应用程序的独家功能。现在,该公司刚刚宣布计划在Windows上的Outlook经典应用程序中引入Copilot。正如其365路线图网站上发布的那样,预览将于明年&lt;&gt;月开始,直到&lt;&gt;月在当前频道的桌面上在全球范围内推出。Copilot是一种生产力工具,它使用大型语言模型(LLM)来帮助用户完成编写电子邮件、汇总文档和翻译语言等任务。它的主要功能之一是它能够总结电子邮件

Java使用Thread类的stop()函数强制终止线程的执行Java使用Thread类的stop()函数强制终止线程的执行Jul 26, 2023 am 09:28 AM

Java使用Thread类的stop()函数强制终止线程的执行在Java多线程编程中,有时候我们需要强制终止一个正在执行的线程。Java提供了Thread类的stop()函数来实现线程的强制终止。本文将介绍stop()函数的用法,并提供代码示例来说明。在介绍stop()函数之前,我们先了解一下Thread类的几个常用方法:start():启动线程,使线程进入

我们如何在Java中实现一个计时器线程?我们如何在Java中实现一个计时器线程?Aug 30, 2023 pm 02:49 PM

Timer类安排任务在给定时间运行一次或重复。它还可以作为守护线程在后台运行。要将Timer与守护线程关联起来,需要使用一个带有布尔值的构造函数。计时器以固定延迟和固定速率安排任务。在固定延迟下,如果任何一个执行被系统GC延迟,则其他执行也会延迟,并且每次执行都会延迟对应于之前的执行。在固定速率下,如果任何执行被系统GC延迟,则连续发生2-3次执行以覆盖与第一次执行开始时间相对应的固定速率。Timer类提供了cancel()方法来取消计时器。当调用该方法时,定时器终止。Timer类仅执行实现Ti

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.