1.到底什么是线程?什么是进程?

Python自己没有这玩意,Python中调用的操作系统的线程和进程.

2.Python多线程情况下:

  • 计算密集型操作:效率低,Python内置的一个全局解释器锁,锁的作用就是保证同一时刻一个进程中只有一个线程可以被cpu调度,多线程无法利用多核优势,可以通过多进程方式解决,但是比较浪费资源.
  • IO操作:效率高

3.Python多进程的情况下:

  • 计算密集型操作:效率高(浪费资源),不得已而为之.
  • IO操作:效率高(浪费资源)

4.为什么有这把GIL锁?

Python语言的创始人在开发这门语言时,目的快速把语言开发出来,如果加上GIL锁(C语言加锁),切换时按照100条字节指令来进行线程间的切换.

5.Python中线程和进程(GIL锁)

GIL锁,全局解释器锁.用于限制一个进程中同一时刻只有一个线程被cpu调度.

扩展:默认GIL锁在执行100个cpu指令(过期时间).

查看GIL切换的指令个数

import sys
v1 = sys.getcheckinterval()
print(v1)

6.为什么要创建线程?

由于线程是cpu工作的最小单元,创建线程可以利用多核优势实现并行操作(Java/C#).

注意:线程是为了工作.

7.为什么要创建进程?

进程和进程之间做数据隔离(Java/C#).

注意:进程是为了提供环境让线程工作.

8.进程和线程的区别?

进程是资源分配的最小单位,线程是程序执行的最小单位.

进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段,堆栈段和数据段,这种操作非常昂贵.而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程小很多,同时创建一个线程的开销比进程要小很多.

线程之间的通信更方便,同一进程下的线程共享全局变量,静态变量,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。

但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

也正是由于GIL锁的原因:IO密集型操作可以使用多线程,计算密集型可以使用多进程.

9.线程创建的越多越好吗?

不好.线程之间进行切换时,要做上下文管理.

10.生产者消费者模型解决了什么问题?

不用一直等待的问题.

11.Lock和RLock的区别是RLock可以多次加锁.

12.进程和线程以及协程的区别?

进程是cpu资源分配的最小单元,一个进程中可以有多个线程。

线程是cpu计算的最小单元。

对于Python来说他的进程和线程和其他语言有差异,是有GIL锁.

GIL锁保证一个进程中同一时刻只有一个线程被cpu调度.

注意:IO密集型操作可以使用多线程,计算密集型可以使用多进程.

协程,是由程序员创造出来的一个不是真实存在的东西.

协程,是微线程,对一个线程进程分片,使得线程在代码块之间进行来回切换执行,而不是在原来逐行执行.

13.IO多路复用作用?

检测多个socket是否已经发生变化(是否已经连接成功/是否已经获取数据)(可读/可写)

IO多路复用作用?

检测多个socket是否发生变化。

操作系统检测socket是否发生变化,有三种模式:

select:最多1024个socket;循环去检测。

poll:不限制监听socket个数;循环去检测(水平触发)。

epoll:不限制监听socket个数;回调方式(边缘触发)。

Python模块:

select.select

select.epoll

14.socket默认是否是阻塞的?阻塞体现在哪里?

默认是阻塞,填在等待消息和连接

15.什么是异步非阻塞?

  • 非阻塞,不等待。

    比如创建socket对某个地址进行connect、获取接收数据recv时默认都会等待(连接成功或接收到数据),才执行后续操作。

    如果设置setblocking(False),以上两个过程就不再等待,但是会报BlockingIOError的错误,只要捕获即可。
  • 异步,通知,执行完成之后自动执行回调函数或自动执行某些操作(通知)。

    比如做爬虫中向某个地址baidu.com发送请求,当请求执行完成之后自执行回调函数。

16.什么是同步阻塞?

- 阻塞:等
- 同步:按照顺序逐步执行

17.什么是协程?

协程也可以称为“微线程”,就是开发者控制线程执行流程,控制先执行某段代码然后再切换到另外函执行代码...来回切换。

18.协程可以提高并发吗?

协程自己本身无法实现并发(甚至性能会降低)。

协程+IO切换性能提高。

19.提高并发方案:

python并发编程知识点总结的更多相关文章

  1. Python并发编程之深入理解yield from语法(八)

    大家好,并发编程 进入第八篇. 直到上一篇,我们终于迎来了Python并发编程中,最高级.最重要.当然也是最难的知识点--协程. 当你看到这一篇的时候,请确保你对生成器的知识,有一定的了解.当然不了解 ...

  2. Python并发编程理论篇

    Python并发编程理论篇 前言 其实关于Python的并发编程是比较难写的一章,因为涉及到的知识很复杂并且理论偏多,所以在这里我尽量的用一些非常简明的语言来尽可能的将它描述清楚,在学习之前首先要记住 ...

  3. Python 并发编程(下)

    Python 并发编程(下) 课程目标:掌握多进程开发的相关知识点并初步认识协程. 今日概要: 多进程开发 进程之间数据共享 进程锁 进程池 协程 1. 多进程开发 进程是计算机中资源分配的最小单元: ...

  4. Python并发编程__多进程

    Python并发编程_多进程 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大 ...

  5. Python并发编程的几篇文章

    Python几种并发实现方案的性能比较 http://www.elias.cn/Python/PyConcurrency?from=Develop.PyConcurrency python并发编程 h ...

  6. 自学Python之路-Python并发编程+数据库+前端

    自学Python之路-Python并发编程+数据库+前端 自学Python之路[第一回]:1.11.2 1.3

  7. Python并发编程二(多线程、协程、IO模型)

    1.python并发编程之多线程(理论) 1.1线程概念 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程(流水线的工作需要电源,电源就相当于 ...

  8. Python并发编程一(多进程)

    1.背景知识(进程.多道技术) 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一 ...

  9. 《转载》Python并发编程之线程池/进程池--concurrent.futures模块

    本文转载自Python并发编程之线程池/进程池--concurrent.futures模块 一.关于concurrent.futures模块 Python标准库为我们提供了threading和mult ...

随机推荐

  1. cacheManager载入问题

    net.sf.ehcache.CacheException: Another unnamed CacheManager already exists in the same VM. Please pr ...

  2. Python 集合常用方法总结

    数据类型:int/str/bool/list/dict/tuple/float/set   (set类型天生去重) 一.集合的定义 s = set()  #定义空集合 s = {'a','b','c' ...

  3. iOS9新特性

    本文主要是说一些iOS9适配中出现的坑,如果只是要单纯的了解iOS9新特性可以看瞄神的开发者所需要知道的 iOS 9 SDK 新特性.9月17日凌晨,苹果给用户推送了iOS9正式版,随着有用户陆续升级 ...

  4. 您的位置:首页 » IOS » iOS中全局悬浮按钮,类似IPhone中的AssistiveTouch iOS中全局悬浮按钮,类似IPhone中的AssistiveTouch

    原文地址:http://blog.5ibc.net/p/86562.html 前提:当时看到别人写过这个类似AssistiveTouch的demo,但是有问题,第一改变不了位置.第二切换页面后无法使用 ...

  5. php调用C代码的方法详解和zend_parse_parameters函数详解

    php调用C代码的方法详解 在php程序中需要用到C代码,应该是下面两种情况: 1 已有C代码,在php程序中想直接用 2 由于php的性能问题,需要用C来实现部分功能   针对第一种情况,最合适的方 ...

  6. UVA 11732 "strcmp()" Anyone? (Trie)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  7. IDEA中如何配置Tomcat和项目?

    IDEA是我用的挺多的一款java代码编辑工具,对于刚接触这款软件的新手来说,配置项目是很麻烦的了,更别说配置服务器Tomcat了,那么通过我的教程大家一定觉得配置IDEA项目也是很轻松的事了.   ...

  8. 你的企业是否须要开发APP?

    移动互联网时代的到来,粗分出"新兴行业"与"传统行业".除了互联网公司,其它似乎都被归到了"传统行业".连传统行业中最传统的房地产公司代表人 ...

  9. vue+node+mongoDB 火车票H5(二)---vux和less的配置

    vue基本环境配置好之后,就可以开始开发页面了 开发页面之前先了解一下项目结构,原始的目录结构为: config是配置文件,环境配置好了开发阶段可以不再去修改了,node_modules文件夹是打包的 ...

  10. input输入框输入小写字母自动转换成大写字母

    input输入框输入小写字母自动转换成大写字母有两种方法 1.用js onkeyup事件,即时把字母转换为大写字母: html里input加上 <input type="text&qu ...