zoukankan      html  css  js  c++  java
  • python并发基础小练习

    必做题

    • 简述操作系统发展史
    • 手工操作(无操作系统)

       缺点:1、用户独占全机

          2、CPU等待人工操作

    • 批处理系统(脱机输入输出系统)(操作系统开始出现)

       省了大量手工操作

       1、单道批处理系统:没有并发性

        特点:自动性、顺序性、单道性

        缺点:I/O操作时,CPU无事可做

       2、多道批处理系统:具有并发性

        特点:多道性、宏观上多任务并行、微观上多任务分片串行

        优点:由于提高了CPU、内存和I/O设备的利用率,因此系统吞吐得到提高

       需要解决的问题:

        处理及管理问题、内存管理问题、I/O设备管理问题、文件管理问题和作业管理问题

        缺点:无交互能力

    • 分时系统

        特点:多路性、独立性(宏观)、及时性和交互性

    • 实时系统(约束更严格的分时系统)

        特点:多路性、独立性、及时性和可靠性

    • 微机操作系统

        单用户单任务系统(dos)、单用户多任务系统(windows)、多用户多任务系统(Linux、Uinux)

    • 简述进程发展史及算法演变

    先来先服务

    时间段的先服务

    时间片轮转发+多级反馈队列

    等等……

    • 简述多道技术

    一个任务在占用cpu时,输入输出设备不会空闲,为下一个任务的运行做准备

    • 简述同步异步阻塞非阻塞概念

    同步:可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的,只有接收到返回的值或消息后才往下执行其他的命令。

    异步:执行完函数或方法后,不必阻塞性地等待返回值或消息,只需要向系统委托一个异步过程,那么当系统接收到返回值或消息时,系统会自动触发委托的异步过程,从而完成一个完整的流程。

    阻塞:阻塞态
    非阻塞:就绪态、运行态

    • 书写进程创建的两种方式
    # 第一种方式 导入模块的方式
    from multiprocessing import Process
    import time
    
    
    def task(name):
        print('%s is running'%name)
        time.sleep(3)
        print('%s is over'%name)
    
    if __name__ == '__main__':
        p = Process(target=task, args=('pipi',))
        p.start()  
        print('>>>>>')
        
        
    # 第二种方式 类的继承
    from multiprocessing import Process
    import time
    
    class MyProcess(Process):
        def run(self):
            print('hello bf girl')
            time.sleep(1)
            print('get out!')
    
    if __name__ == '__main__':
        p = MyProcess()
        p.start()
        print('>>>>>')
    
    • 手动书写生产者消费者代码
    from multiprocessing import Process
    from multiprocessing import JoinableQueue
    import time
    import random
    
    def producer(name, food, q):
        for i in range(4):
            data = f'{food}{i}'
            time.sleep(random.uniform(1, 2))
            print(f'生产者{name}生产了{data}')
            q.put(data)
    
    def customer(name, q):
        while True:
            data = q.get()
            time.sleep(random.choice([1, 2]))
            print(f'消费者{name}购买了{data}')
            q.task_done()  # 没执行一次队列数据计数器-1
    
    if __name__ == '__main__':
        q = JoinableQueue()
        p1 = Process(target=producer, args=('商家1', '包子', q))
        p2 = Process(target=producer, args=('商家2', '泔水', q))
        c1 = Process(target=customer, args=('用户1', q))
        c2 = Process(target=customer, args=('用户2', q))
        c1.daemon = True
        c2.daemon = True
        p1.start()
        p2.start()
        c1.start()
        c2.start()
        p1.join()
        p2.join()
        q.join()
    
    • 利用多进程或多线程自己实现TCP服务端的并发
    import socket
    from threading import Thread
    from multiprocessing import Process
    
    server =socket.socket() 
    server.bind(('127.0.0.1',8080))
    server.listen(5)
    
    
    def talk(conn):
        # 通信循环
        while True:
            try:
                data = conn.recv(1024)
                if len(data) == 0: break
                print(data.decode('utf-8'))
                conn.send(data.upper())
            except ConnectionResetError as e:
                print(e)
                break
        conn.close()
    
    # 链接循环
    while True:
        conn, addr = server.accept()  # 接客
        t = Thread(target=talk,args=(conn,))
        # t = Process(target=talk,args=(conn,))
        t.start()
    
    
    """客户端"""
    import socket
    
    client = socket.socket()
    client.connect(('127.0.0.1',8080))
    
    while True:
        client.send(b'hello world')
        data = client.recv(1024)
        print(data.decode('utf-8'))
    
    • 将具体内容整理到博客中

    选做题

    • 计算机硬件知识扩展(感兴趣)
    • 数据分析算法学习资料收集(感兴趣)
  • 相关阅读:
    git提交本地代码到远程服务器
    报错 D:Program Files odejs ode_cache\_logs2019-05-07T07_07_30_992Z-debug.log
    vue项目中使用插件将字符串装化为格式化的json数据(可伸缩)
    odoo官方文档第二章 Data Files
    odoo官方文档第一章 ORM
    odoo模块的创建 openacademy学习笔记
    mysql存储过程的学习(二)
    mysql存储过程的学习(一)
    linux 进入mysql的常用命令(转)
    Dubbo入门学习(转)
  • 原文地址:https://www.cnblogs.com/Lance-WJ/p/12756066.html
Copyright © 2011-2022 走看看