day 35.笔记代码

day 35.笔记代码
1.内容回顾
并发编程
io操作 : input/output
阻塞 非阻塞(get_nowait) 同步 异步(start terminate submit map) 并发 并行
进程的三状态图 : 阻塞 运行 就绪
进程  计算机中最小的资源分配单位
    进程之间数据隔离\资源不共享
    可以利用多个CPU
    开启和销毁的开销大
    由操作系统负责调度
    multiprocessing模块
        Process类 : 开启进程
            各种操作进程的方法
            守护进程 : 守护到主进程的代码结束
        IPC : 进程之间通信
            基于文件Queue Pipe\基于网络 socket 第三方工具
        进程中的互斥锁 Lock :性能好
        进程中的递归锁 RLock : 效率低
            递归锁可以锁多次不会发生死锁
线程
    计算机中能够被操作系统调度的最小单位
    线程之间资源共享
    可以利用多核
    开启和销毁的开销小
    由操作系统负责调度
    GIL锁 : 全局解释器锁 互斥锁
        导致了Cpython解释器下  同一个进程下的多个线程 不能利用多核
        由于垃圾回收机制gc不能在多线程环境下正常进行引用计数
    threading模块
        Thread类
            开启线程
            守护线程 : 守护整个主线程的
            子线程先结束
            主线程结束
            主进程结束(意味着主进程就结束了,一旦主进程结束,所有的属于这个进程的资源都被回收了)
            主进程结束了 如果还存在守护线程,那么守护线程会随着进程的结束被回收
        锁:
            死锁现象  交叉使用互斥(递归锁)锁
            线程互斥锁
            线程递归锁
            单例模式 要加锁
            线程之间数据安全
                但凡是 带着判断 判断之后要做xxxx 都需要加锁
                if while += -= *= /= 都需要加锁
                n = 0;tmp=n;n = tmp+1
            append pop extend 队列 logging都是线程安全的
    线程队列
        queue模块
        Queue 先进先出
            生产者消费者模型
        LifoQueue 后进先出栈
            from queue import LifoQueue
            lq = LifoQueue()
            lq.put(1)
            lq.put(2)
            lq.put(3)
            print(lq.get())
        PriorityQueue 优先级队列
            from queue import PriorityQueue
            pq = PriorityQueue()
            pq.put((10,'alex'))
            pq.put((5,'egon'))
            pq.put((15,'yuan'))
            print(pq.get())
            print(pq.get())
            print(pq.get())
    池 concurrent.futrues
        进程池 ProcessPoolExecutor
        线程池 ThreadPoolExecutor
        回调函数
import requests
from concurrent.futures import ThreadPoolExecutor

def get_url(name,url):
    ret = requests.get(url)
    return name,ret.content

def dump(res):
    with open(res.result()[0],mode='wb') as f:
        f.write(res.result()[1])

tp = ThreadPoolExecutor(4)
dic = {
    'baidu':'http://www.baidu.com',
    'taobao':'http://www.taobao.com',
    'jd':'http://www.jd.com',
    'sina':'http://www.sina.com',
    'sogou':'http://www.sogou.com',
    'cnblog':'https://www.cnblogs.com/Eva-J/articles/9676220.html',
}
for k in dic:
    ret = tp.submit(get_url,k,dic[k])
    ret.add_done_callback(dump)

协程
    资源开销小
    协程是微线程
    本质是一条线程 所以不能利用多核
    由程序控制的,不是由操作系统调度的
    gevent 第三方模块
    协程能够识别的IO操作 : 网络操作 sleep
    协程和cpython解释器下的线程有啥区别 :资源开销小 能够把单线程的效率提高 协程能够识别的io操作不如线程多

学了什么
    基础数据类型
    流程控制 if while for
    文件操作
    函数 (定义 调用 参数 返回值 命名空间和作用域 闭包 装饰器 生成器 迭代器 匿名函数 内置函数 递归)
    模块 (常用模块 自定义模块 模块的导入 开发规范 包)
    面向对象(基础 三大特性 三个装饰器 内置方法 反射)
    网络编程(osi协议 socket模块 tcp的粘包 socketserver)
    并发编程(操作系统概念 进程 线程 协程)
回顾作业
    三次登录 购物车 atm 博客园 选课系统 ftp
2.今日内容
认识数据库
名词和概念
安装和启动
基础的sql语句
3.初始数据库
数据库管理系统-DBMS
    网络应用服务端
    我们要使用服务端的数据 - 需要有一个客户端
        客户端可以自己写   : 未来写代码的时候
        也可以用别人写好的 : 第三方的工具 数据库管理软件的公司出版的官方客户端
    数据库管理系统本质上也是管理一堆文件
        只不过人家的管理方式比我们更高效 更安全
数据库管理员-DBA
    搭建数据库服务环境
    用户的创建 权限的管理
    性能\语句的优化
    数据库的二次开发 : 让数据库具有公司的特质
软件
     mysql : 小公司 互联网企业
    甲骨文 oracle  : 事业单位 金融企业
    微软 sql server
    sqllite
名词
    DB    数据库 - 文件夹
    table 表 - 文件
    data  一条数据-每一行数据

数据库的分类
    关系型数据库 mysql oracle sqlserver sqllite
    非关系型数据库 redis mongodb memcache hbase

转载于:https://www.cnblogs.com/bky20061005/p/11574455.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值