• IO多路复用,数据库mysql


    协程:

    单线程下由应用程序级别实现的并发,即把本来由操作系统控制的切换+保存状态,在应用程序里实现

    协程的切换vs操作系统的切换

    优点:

    切换速度远快于操作系统

    缺点:

    一个任务阻塞了,其余的任务都无法执行

    Ps:只有遇到IO才切换到其他任务的协程才能提升单线程的执行效率

    把耽搁线程的IO降到最低,最大限度的提升单个线程的执行效率

    实现方式

    From gevent import spawn,monkey;monkey.patch.all()

    IO模型:

    block io 阻塞io

    nonblocking io 非阻塞io

    1、cpu的无效暂用率过高

    2、不能及时反馈客户端的信息

    1、IO多路复用

    服务器:

    server = socket(AF_INET, SOCK_STREAM)
    server.bind(('127.0.0.1',8080))
    server.listen(5)
    server.setblocking(False)
    
    data_dic={}
    read_list=[server,]
    write_list=[]
    print('start....')
    while True:
        rl,wl,xl=select.select(read_list,write_list,[]) #read_list=[server,conn1,conn2,conn3,conn4]
    #select.select是系统调用功能,是操作系统问,当没有秒数的时候会堵塞,当有秒数时会等#到几秒内没有用户访问,就运行下面的内容,然后再返回到这个等待地方
    #rl 有数据的列表套接字  里面有一个server 后期有多个conn
        # print('read_list:%s rl:%s wl:%s ' %(len(read_list),len(rl),len(wl))) #rl=[conn1,conn2]
        for sk in rl:
            if sk == server:
                conn,addr=sk.accept()
                read_list.append(conn)
            else:
                # sk.recv(1024)
                # print(sk)
                data=sk.recv(1024)
                write_list.append(sk)
                data_dic[sk]=data#sk套接字,data消息内容
    
        for sk in wl:
            sk.send(data_dic[sk].upper())
            data_dic.pop(sk)
            write_list.remove(sk)

    客户端:

    import socket
    chile = socket.socket()
    chile.connect(("127.0.0.1",8080))
    
    while True:
        msg = input(">>:").strip()
        if len(msg)==0:continue
        chile.send(msg.encode("utf-8"))
        func=chile.recv(1024)
        print(func.decode("utf-8"))

    异步IO效率最高

    2、数据库mysql

    数据库本质就是一个C/S的套接字软件

    常见的数据库:

    关系型:

    Mysql

    Mariadb

    Oracle

    Db2

    Sqlserver

    非关系:

    存取数据都是以key:value

    Mongodb

    Redis

    Memcache

    2.1、数据库相关概念:

    数据库服务器:运行有数据库管理软件的计算机

    数据库管理软件mysql:就是一个套接字服务器

    库:就是一个文件夹

    表:就是一个文件

    记录:就相当于文件中的一行内容(抽取事物一系列典型的特征拼接到一起)

    数据:用于记录现实世界中的某种状态

    下载mysql数据库

    https://dev.mysql.com/downloads/mysql/  选择双数版本,求的是稳定性

    解压完就是安装完毕

     

    Bin存放可执行文件

    其中mysqld.exe就是套接字服务端,mysql.exemysql自带的客户端软件

    Data里面一个文件夹就是一个库,ib_logfile数据日志文件

    my-default配置文件

     

    切换到E盘的mysql文件

     

    启动服务器

    绑定IP,端口,默认127.0.0.13306

     

    h为服务端IP,大P为端口号,密码有空格,p后面要加引号

     

    查看当前登入的用户,root@localhost 表示着用户root登入的是本地

     

    显示登入的是两个进程,在本地,服务端是19008上面的,下面的是客户端16980

     

    quit;退出,然后mysqld --verbose --help配置文件,要远程服务端,服务器地址就不要是默认的127.0.0.1,而是服务器地址

     

    绑定ip0.0.0.0”是只要拼通就都能访问到本机

     

     

    通过mysqld --install将服务器添加到服务端,这样可以直接在上面运行

     

    s查看mysql的字符编码

     

    字符编码不一致

     

    可以通过新建my.ini里面统一字符编码设置

    [mysqld]#bin目录下的命令名,服务器

    character-set-server=utf8

    collation-server=utf8_general_ci

    [client]#也是针对于客户端,客户端的全局性配置,所有客户来都加载这个

    default-character-set=utf8

    [mysql]#客户端

    default-character-set=utf8

    Mysql removed 初始化服务器 服务器里的mysql被删,要重新mysql --install添加

    只有修改mysqld里面的内容才需要重启服务端

     

    指定用户默认账户

  • 相关阅读:
    [模板]RMQ(冲刺准备中)
    洛谷 P2569[SCOI2010]股票交易(动规+单调队列)
    洛谷 P3659 [USACO17FEB]Why Did the Cow Cross the Road I G
    粗略了解fill与fill_n
    计蒜客D2T2 蒜头君的排序(动态维护树状数组)
    洛谷 P3478 [POI2008]STA-Station
    洛谷 P2899 [USACO08JAN]手机网络Cell Phone Network
    洛谷 P3112 [USACO14DEC]后卫马克Guard Mark
    洛谷 P3092 [USACO13NOV]没有找零No Change
    洛谷 P2850 [USACO06DEC]虫洞Wormholes 判负环
  • 原文地址:https://www.cnblogs.com/yf18767106368/p/9333954.html
Copyright © 2020-2023  润新知