一、什么是线程

线程:顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程

所以,进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位。

 多线程(即多个控制线程)的概念是,在一个进程中存在多个控制线程,多个控制线程共享该进程的地址空间,相当于一个车间内有多条流水线,都共用一个车间的资源。(一个进程里面开多个线程(共享同一个进程里面的内存空间))

例如,北京地铁与上海地铁是不同的进程,而北京地铁里的13号线是一个线程,北京地铁所有的线路共享北京地铁所有的资源,比如所有的乘客可以被所有线路拉。

注意:

1.所以进程里面真正干活的是线程(进程里面有线程)

2.进程只是用来把资源互相隔离开,而线程才是真正负责cpu来调动他的

二、线程的创建开销小 

创建进程的开销要远大于线程?

如果我们的软件是一个工厂,该工厂有多条流水线,流水线工作需要电源,电源只有一个即cpu(单核cpu)

一个车间就是一个进程,一个车间至少一条流水线(一个进程至少一个线程)

创建一个进程,就是创建一个车间(申请空间,在该空间内建至少一条流水线)

而建线程,就只是在一个车间内造一条流水线,无需申请空间,所以创建开销小

三、线程与进程的区别

1.创建线程比进程开销小(开一个进程,里面就有空间了,而线程在进程里面,就没必要在开一个空间了)
2.多线程一定是在一个进程里面开启的,共享进程里面的资源
3.线程启动的速度快
4.同一进程下的多个线程共享进程的资源,而多个进程之间内存空间是隔离的
n = 100
def work():
global n
n-=100
如果开进程n是相互独立的,而线程是共享了资源,就不隔离了

在wins下开进程,子进程不会拷贝父进程的
在linux下开进程,子进程会完全拷贝父进程的

5.线程可以跟它所在的进程之内 的线程通信

四、为何要用多线程

多线程指的是,在一个进程中开启多个线程,简单的讲:如果多个任务共用一块地址空间,那么必须在一个进程内开启多个线程。详细的讲分为4点:

  1. 多线程共享一个进程的地址空间

2. 线程比进程更轻量级,线程比进程更容易创建可撤销,在许多操作系统中,创建一个线程比创建一个进程要快10-100倍,在有大量线程需要动态和快速修改时,这一特性很有用

3. 若多个线程都是cpu密集型的,那么并不能获得性能上的增强,但是如果存在大量的计算和大量的I/O处理,拥有多个线程允许这些活动彼此重叠运行,从而会加快程序执行的速度。

4. 在多cpu系统中,为了最大限度的利用多核,可以开启多个线程,比开进程开销要小的多。(这一条并不适用于python)

转载于:https://www.cnblogs.com/xiaohema/p/8454520.html

python全栈开发基础【第二十三篇】线程相关推荐

  1. Python全栈开发记录_第一篇(循环练习及杂碎的知识点)

    Python全栈开发记录只为记录全栈开发学习过程中一些难和重要的知识点,还有问题及课后题目,以供自己和他人共同查看.(该篇代码行数大约:300行) 知识点1:优先级:not>and 短路原则:a ...

  2. python全栈开发基础【第十七篇】面向对象反射和内置方法

    一.静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静态方法:让类里的方法直接被 ...

  3. python学习ajax_Python开发【第二十三篇】:AJAX全套

    概述 对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 1.传统的Web应用 一个简单操作需要 ...

  4. python全栈开发百度云_老男孩2020最新Python全栈开发基础班+就业班

    |- 数据结构+算法.rar - 485.30 MB |- 串讲.rar - 2.01 GB |- 补充资料.rar - 536.00 MB |- MongoDB.rar - 110.10 MB |- ...

  5. Python 全栈开发基础

    python面向对象 python异常处理 python网络编程 python并发编程 临时目录 转载于:https://www.cnblogs.com/fixdq/p/8883304.html

  6. python全栈开发基础【补充】包的补充

    1.包A和包B下有同名模块也不会冲突,因为A.a与B.a来自俩个命名空间 2.常见目录结构 # 创建目录代码 import os os.makedirs('glance/api') os.makedi ...

  7. python全栈开发基础学习过程笔记【18d】os模块

    os模块调用操作系统,对文件和文件夹进行操作 1.头文件 impoet os 2os.getcwd() 作用:当前脚本工作的目录路径 print(os.getcwd()) 输出: ========== ...

  8. python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)

    python全栈开发笔记第二模块 第四章 :常用模块(第二部分)     一.os 模块的 详解 1.os.getcwd()    :得到当前工作目录,即当前python解释器所在目录路径 impor ...

  9. 收藏!最详细的Python全栈开发指南 看完这篇你还不会Python全栈开发 你来打我!!!

    Python Web全栈开发入门实战教程教程    大家好,我叫亓官劼(qí guān jié ),这个<Python Web全栈开发入门实战教程教程>是一个零基础的实战教程,手把手带你开 ...

最新文章

  1. Google Test(GTest)使用方法和源码解析——参数自动填充技术分析和应用
  2. 很多人说单片机很简单,有些本专业学生为什么学起来这么吃力?
  3. 先为成功的人工作,再与成功的人合作,最后是让成功的人为你工作
  4. 3.9 训练一个 Softmax 分类器-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  5. 自增符号++(自减符号--)带来的部分影响
  6. 互联网广告系统综述一生态圈
  7. 【渝粤教育】 广东开放大学 21秋期末考试组织行为学10068k2
  8. 【Flink】Flink UI 查看 subtask在相应的机器上的调度时间
  9. Java Web项目 配置 ueditor心得
  10. 无需代码绘制出的热力图,0基础小白也能3分钟上手
  11. c# json转对象
  12. 这个高颜值的开源第三方网易云音乐播放器你值得拥有
  13. 《微机原理与应用》题库
  14. raid卡组不同raid_磁盘阵列卡组RAIDO 对比主板自带组磁盘阵列
  15. 骨骼动画程序原理介绍
  16. APK编辑器v2.4.3强行修改app背景图、去广告、重新架构等
  17. 上门洗车APP --- Androidclient开发 之 网络框架封装介绍(二)
  18. m3u8转换到mp4 python_如何把m3u8格式转换成mp4格式?
  19. 为什么我劝你要多攒钱?
  20. Neuratron PhotoScore Ultimate v8.8.6/8.8.4 WiN-MAC 乐谱扫描识别软件

热门文章

  1. angularjs 的笔记
  2. mybatis like的用法
  3. hive 的分隔符、orderby sort by distribute by的优化
  4. 算法学习:后缀数组 height的求取
  5. Git_Eclipse:[7]Git解决冲突
  6. 科大讯飞语音转文字以及中文分词的Java测试代码
  7. 关于数论【康托展开及其逆运算】
  8. [推荐] 创业者要留意优先清算权
  9. 系统集成项目管理工程师-项目人力资源管理笔记
  10. 文件服务器安全,文件服务器安全