回顾:
线程:资源的集合;内存共享,两个或多个线程同时修改一份数据时,造成结果可能不正确,必须加锁
进程:运行的最小单元

守护进程:在start之前设置setDemo()
队列queue:作用解耦,使程序之间是实现松耦合,提高处理效率
FIFO:先进先出
LIFO:后进先出
队列中的数据使用完就没了(消费者生产者模型)
事件event:(红绿灯模型)
 
 
python中的多线程是一个假象,我们是利用它上下文切换
io操作不占用CPU,计算操作占用CPU,
python中大量的计算反而会使程序变得更慢
python的多线程不适合CPU密集操作型的任务,适合io密集型的任务
 
进程之间不能互相访问,不需要锁的概念
多进程可以解决多核的问题
每一个子进程都是由它的父进程启动的,主进程本身的父进程是python本身
 
 
 
 
 
if __name__ =="__main__" 手动执行时会执行下面的代码,若是当成一个模块让其他调用则不执行
 
:微线程,一种用户态的轻量级线程,在单线程下实现并发的效果,cpu根本不知道,单线程,不需要锁。协程跑在线程上,线程跑在进程中。
单线程是串行的
在单线程下实现并发的效果:各协程遇到IO操作就切换,只剩下CPU运算;什么时候再切回去???IO操作完了就切回去,程序自动检测IO操作完了
 
 
 
异步IO
论事件驱动和异步IO
 
 
IO 多路复用
 
用户空间和内存空间:
进程切换:保存上下文
进程的阻塞:
文件描述符:用于表述指向文件的引用的抽象化的概念,一个非负整数,一个索引值
文件句柄:实际存在的
缓存I/O:数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。
 
内核态到用户态的数据切换:用户态没有权限直接对内核进行操作,只能调用内核的接口,由操作系统的内核进行操作
 
二 IO模式
阻塞I/O:
非阻塞I/O:
 
I/O多路复用
 
select 把收到的多个socket发送给内核,有一个链接活跃,内核就将检测到的内容返回给用户(但是不告诉用户是哪个链接活跃),让用户确认再调用
 
异步I/O
内核处理完,直接将数据拷贝到用户态,不会产生block
 
 
 
I/O多路复用三种模式:
select 
poll 
epoll 
和select比较,好处:没有最大检测数的限制,
返回链接响应
 

Python成长笔记 - 基础篇 (十一)的更多相关文章

  1. Python成长笔记 - 基础篇 (十一)----RabbitMQ、Redis 、线程queue

    本节内容: 1.RabbitMQ 消息队列 2.Redis 3.Mysql   PY 中的线程queue(threading Queue):用于多个线程之间进行数据交换,不能在进程间进行通信 进程qu ...

  2. Python成长笔记 - 基础篇 (十二)

    本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 主题:学员管理系统 需求: 用户角色,讲师\学员, 用户登陆后根据角色不同,能做的 ...

  3. Python成长笔记 - 基础篇 (十)

    本节内容 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queu ...

  4. Python成长笔记 - 基础篇 (七)python面向对象

      三大特性: 1.封装:在类中对数据赋值.内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含着类的数据和方法 2.继承:一个类可以派生出子类,在父类中定义的属性.方法会自动被子类继承 ...

  5. Python成长笔记 - 基础篇 (六)python模块

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...

  6. Python成长笔记 - 基础篇 (四)函数

    1.面向对象:类(class) 2.面向过程:过程(def) 3.函数式编程:函数(def)----python   1.函数:http://egon09.blog.51cto.com/9161406 ...

  7. Python成长笔记 - 基础篇 (三)python列表元组、字典、集合

    本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码   一.列表和元组的操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义 ...

  8. Python成长笔记 - 基础篇 (二)python基本语法

    Python的设计目标之一是让代码具备高度的可阅读性.它设计时尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来整洁美观.它不像其他的静态语言如C.Pascal那样需要重复书写声明语句,也不像 ...

  9. Python成长笔记 - 基础篇 (一)python简介

    一.Python介绍 Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/),由吉多·范罗苏姆(Guido van Rossum)于1989年发明,第一个公开发行版发行于1991 ...

随机推荐

  1. ASP.NET ZERO 学习 HangFire的使用二

    之前在ABP配置好了HangFire环境之后,那么如何才能添加Job到HangFire中让其执行呢 这就需要参考ABP的Background Jobs and Workers, 参考路径:http:/ ...

  2. URL传递中文乱码的问题

    在AJAX浏览器来进行发送数据时,一般它所默认的都是UTF-8的编码. 使用JQUERY中所提供的方法来做操作 encodeURI function verify() {    //解决中文乱麻问题的 ...

  3. redis对比其余数据库

    Redis属于常见的NoSQL数据库或者说非关系数据库:Redis不使用表,她的数据库也不会预定义或者强制去要求用户对Redis存储的不同数据进行关联. 常见数据库对比: 和高性能键值缓存服务器mem ...

  4. webstorm11怎么设置成sublime3的界面

    引入架包导入即可 下载路径:https://github.com/OtaK/jetbrains-monokai-sublime

  5. js+cookie 购物车

    $(function () { //var ctx = new Ch(); //ctx.Clear(); //$.cookie(ctx.cookieName, ""); //ale ...

  6. mysql在linux下不区分大小写

    1.先停止mysql service mysql stop 2.如果用rpm直接安装的mysql,路径在:/usr/下,查找my.cnf. 3.在[mysqld]下添加: lower_case_tab ...

  7. C#中的问号

    本人转载自: ①http://msdn.microsoft.com/zh-cn/practices/dd391752.aspx ②http://jhxk.iteye.com/blog/439888 在 ...

  8. IIS 7 的 500 內部錯誤

    印象中這個有名的錯誤提示從 ASP 時代就已經存在 不是很明白微軟怎麼想的 你們所面對的客戶族群有為數不少的開發人員 除錯環境對開發者來說算是基本配備 為何不把這些相關設定做成「出廠預設值」? 都幾年 ...

  9. RPM包的制作

    RPM包的制作 前言 按照其软件包的格式来划分,常见的Linux发行版主要可以分为两类,类ReadHat系列和类Debian系列,这两类系统分别提供了自己的软件包管理系统和相应的工具. 类RedHat ...

  10. 一个简单算法题引发的思考<DNA sorting>(about cin/template/new etc)

    首先是昨天在北京大学oj网上看到一个简单的算法题目,虽然简单,但是如何完成一段高效.简洁.让人容易看懂的代码对于我这个基础不好,刚刚进入计算机行业的小白来说还是有意义的.而且在写代码的过程中,会发现自 ...