进程与线程:
*进程: 进程是系统中程序执行和资源分配的基本单元, 每个进程都有自己的数据段(存储数据)、代码段(存储代码)、堆栈段(对象和变量). # 全局变量等资源在多个进程中不能            共享, 在子进程中修改全局变量对父进程中的全局变量没有影响.
*线程: 在一个进程内要同时干多件事, 就得同时运行多个"子任务", 这些子任务称为线程; 每个线程共享这个进程的所有资源(变量和数据等)和内存空间, 所以在子线程里面可以修改该            进程的变量.
*多任务: 操作系统可以同时运行多个任务, 每个任务就是一个进程或者一个线程.
*并发: 并发是指一个处理器同时处理多个任务; 由于cpu调度执行的速度太快了, 所以看起来是同时执行, 实际上是轮流交替执行的.
*并行: 并行是指多个处理器同时处理多个任务.
*单核cpu实现多任务的原理: 操作系统轮流让各个任务交替执行, 由于cpu调度执行的速度太快了, 导致我们感觉就像所有的任务都在同时执行一样.
*多核cpu实现多任务的原理: 由于实际任务数量是远远多于cpu的核心数量的, 所以操作系统会自动把很多任务轮流调度到每个核心上执行.
*实现多任务的方式: 1. 多进程模式(用的较多): 一个父进程, n个子进程, 进程由操作系统来调度执行没有顺序; 要想让所有子进程结束后再让父进程结束, 可在子进程末尾使用 .join()方                                      法.
                                2. 多线程模式(用的最多): 一个父线程, n个子线程, 线程由操作系统来调度执行没有顺序, 要想线程顺序执行, 需要加锁(Lock); 要想所有子线程结束后再让父线程                                        结束, 可在子线程末尾使用 .join()方法.
                                3. 协程模式(用的很少): 协程看上去也是子程序, 但执行过程中, 在子程序的内部可中断, 然后转而执行别的子程序, 不是函数调用.
                                4. 多进程+多线程(一般不建议使用)
*多进程模块: multiprocessing, 它里面的Process类是用来创建一个进程实例的, Pool线程池类是用来创建多个进程实例的.
*线程模块: threading, 它里面的Thread类是用来创建一个线程实例的, Lock类是用来创建一个锁实例的.
*计算机IO操作: IO指的是计算机执行读写操作, 由于计算机执行读写操作的速度比cpu和内存的速度慢的多得多, 所以C语言这种底层计算机语言虽然cpu的速度比python快很多, 但是                           有时候还是得等待计算机执行IO操作, 所以python在某些领域才有竞争力.

多进程:

# 从多进程模块(multiprocessing)导入Process类
from multiprocessing import Process
import time
import os # 定义子进程
def run(str):
while True:
# os.getpid()获取进程id, os.getppid()获取父进程id
print("process %s"%str,os.getpid(),os.getppid())
# 延时2秒
time.sleep(2) if __name__ == '__main__':
print("父进程启动",os.getpid())
# 创建子进程, 用Process类创建一个pro对象
pro = Process(target=run,args=("",))
# 启动子进程
pro.start()
while True:
print("process 2")
time.sleep(2.5)

线程锁:

# 线程锁的应用, 让线程顺序执行.
import time # 导入时间模块
import threading # 导入threading线程模块 num = 10 # 设置一个全局变量
lock = threading.Lock() # 创建一个锁实例 def reduce_num(): # 定一个子线程函数reduce_num
print("子线程开始...")
global num # 声明全局变量
lock.acquire() # 获得一个锁对象
temp = num # 读取全局变量num
num = temp - 1 # 把从全局拿来的变量进行减一的操作
lock.release() # 释放掉锁
print("子线程结束...\n")
time.sleep(1) # 增加一个休眠功能 if __name__ == '__main__':
print("父线程启动")
for i in range(10): # 从0到10进行循环
t = threading.Thread(target=reduce_num) # 在循环中创建子线程,共创建10个
t.start() # 循环启动子线程
t.join() # 让子线程结束后, 再让父线程结束 print("Result:%s"%num) # 打印通经过多次子线程函数更改过的全局变量, 结果为0则实验成功.
print("父线程结束")

结果:  Result : 0

Python进程与线程的更多相关文章

  1. python 进程和线程

    python中的进程.线程(threading.multiprocessing.Queue.subprocess) Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就 ...

  2. Python进程、线程、协程

    进程和线程的解释 进程(process)和线程(thread)是操作系统的基本概念,计算机的核心是CPU,它承担了所有的计算任务: 单个CPU一次只能运行一个任务,代表单个CPU总是运行一个进程,其他 ...

  3. python进程、线程、协程(转载)

    python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资 ...

  4. Python进程和线程

    引入进程和线程的概念及区别 1.线程的基本概念 概念 线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但 ...

  5. Python进程、线程、协程详解

    进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. ...

  6. python——进程、线程、协程

    Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/usr/bin/env pytho ...

  7. python进程和线程(六)

    协程 协程,又称微线程,纤程.英文名Coroutine.顾名思义,协程是协作式的,也就是非抢占式的程序(线程是抢占式的).协程的关键字是yield,一看到这个就想到了生成器对不对?那就顺便回顾一下生成 ...

  8. python 进程、线程与协程的区别

    进程.线程与协程区别总结 - 1.进程是计算器最小资源分配单位 - 2.线程是CPU调度的最小单位 - 3.进程切换需要的资源很最大,效率很低 - 4.线程切换需要的资源一般,效率一般(当然了在不考虑 ...

  9. python进阶:Python进程、线程、队列、生产者/消费者模式、协程

    一.进程和线程的基本理解 1.进程 程序是由指令和数据组成的,编译为二进制格式后在硬盘存储,程序启动的过程是将二进制数据加载进内存,这个启动了的程序就称作进程(可简单理解为进行中的程序).例如打开一个 ...

随机推荐

  1. java常用IO流集合用法模板

    package com.fmy; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import jav ...

  2. 【一天一道LeetCode】#86. Partition List

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  3. emacs24 颜色主题设置

    Emacs24 颜色主题设置 在Linux上写程序,永远绕不过的2个东西就是vi和emacs.emacs是早晚要接触的东西.本文就从配置颜色主题(color-theme)开始.用命令:$ sudo a ...

  4. 固定宽高的DIV绝对居中示例

    看了一些代码,然后自己试验了一番,分享如下示例: 实现点: 如果元素的宽高固定,那么,css指定样式为top:50%;left:50%; 而margin-top和 margin-left 指定为负数, ...

  5. iOS中 DataBase SQL数据库 UI_高级

    SQL(Structured query Lauguage) :结构化 查询 语言 1.创建表格的SQL语句 create table if not exists Teacher(tea_id int ...

  6. Linux 共享内存 详解

    一.什么是共享内存区 共享内存区是最快的可用IPC形式.它允许多个不相关的进程去访问同一部分逻辑内存.如果需要在两个运行中的进程之间传输数据,共享内存将是一种效率极高的解决方案.一旦这样的内存区映射到 ...

  7. Linux多线程实践(1) --线程理论

    线程概念 在一个程序里的一个执行路线就叫做线程(thread).更准确的定义是:线程是"一个进程内部的控制序列/指令序列"; 一切进程至少有一个执行线程; 进程  VS. 线程  ...

  8. Linux的mount命令简介

    在Linux系统中,如果要使用硬盘.光盘.软盘或MO盘等存储设备,必须先进行挂装(Mount).当存储设备挂装完成之后,就可以将其作为一个目录来进行访问了.挂装设备需要使用mount命令.执行这一命令 ...

  9. 4.2、Libgdx各个模块概览

    (原文:http://www.libgdx.cn/topic/34/4-2-libgdx%E5%90%84%E4%B8%AA%E6%A8%A1%E5%9D%97%E6%A6%82%E8%A7%88) ...

  10. 【一天一道LeetCode】 #3 Longest Substring Without Repeating Characters

    一天一道LeetCode (一)题目 Given a string, find the length of the longest substring without repeating charac ...