zoukankan      html  css  js  c++  java
  • day39线程

    复习:

      C/S架构:  客户端     服务器模式

      B/S架构:  浏览器     服务器模式

        B/S架构的客户端对PC机的性能要求比较低.统一了应用的接口

        B/S架构隶属于C/S架构

      TCP UDP的区别:

        TCP 面向连接,可靠的,面向字节流

        UDP 不面向连接,不可靠的,速度快,面向数据包的

      TCP会发生粘包:

        粘包:数据混乱.发送端发送了数据后,接收端不知道应该如何去接受

          合包机制:Nagle算法

          拆包机制

        注意:只有TCP协议才会发生粘包

      arp协议:要通过目标的IP地址获取到目标的MAC地址

      OSI五层模型:

        应用层         http,https,ftp

        传输层        tcp,udp

        网络层        ip协议

        数据链路层      arp协议    网卡

        物理层                 网线,电信号,集线器

      交换机和路由器的区别?

        交换机主要用来组织局域网,进行同一网段之间的信息传输

        路由器: 主要用来跨网段的西南西传输,路由出最佳路径

      

      交换机的通信方式:

        单播:点对点

        广播:吼一嗓子

        组播:点对多(一组或者多台)

      如何判断两个电脑是否处于同一网段?

        子网掩码 & ip地址

      

      并发和并行

        并发:在同一时间段内多个任务同时进行

        并行:同一时间点多个任务同时进行

      进程和线程的区别?

        进程: 是资源分配的基本单位

        线程: 是最小的执行单位,线程不能单独拥有资源,必须依赖与所属进程

        当计算密集时,多进程比较好.IO密集时,使用多线程

      GIL锁:全局解释锁,锁的是线程.保证同一时间只允许一个线程访问cpu

      互斥锁: 一把锁配一把钥匙.主要用于保护数据安全

          共享资源,又叫做临界资源.共享代码又叫做临界代码

          对临界资源进行操作时,一定要加锁

      递归锁: 一把万能钥匙配好多把锁

      

      信号量:

        也是用来保护数据安全

        一把锁配好多把钥匙

      事件:

        wait()  判断is_set的bool值,如果为True,wait是非阻塞

        set    将is_set的bool指设置为True

        is_set  标识

        clear    将is_set值设置为False

      多线程还学了:

        条件

        定时器: Timer(t,func)

      多进程之间的通信:

        队列和管道

        队列是安全的.   队列= 管道+锁

        管道是不安全的

      队列实现的生产者消费者模型

        这个模型主要是为了解耦

      进程池的模块: Pool

        p.map()

        p.apply: 同步提交任务

        p.apply_async() 异步提交任务

        回调函数:在进程池中,是父进程调用的回调函数

    今日内容:

      1   同一个进程内的队列(多进程)    

        import queue

        queue.Queue()  先进先出

        queue.LifoQueue()  后进先出

        queue.PrioritQueue()  优先级队列

          优先级队列  q = queue.PriorityQueue()

            q.put()  接受的是一个元组

            元组中第一个参数是: 表示当前数据的优先级

            元组中的第二个参数是: 需要存放到队列中的数据

          优先级的比较(首先保证整个队列中,所有表示优先级的类型一致)

            如果都是int,比较数值的大小

            如果都是str,比较字符串的大小(从第一个字符的ASCII码开始比较)

      2  线程池

         在一个池子里,放固定数量的线程,这些线程等待任务,一旦有任务来,就有现成自发的执行任务.

        concurrent.futures 这个模块是异步调用的机制

        concurrent.futures 提交任务都是用submit

        for + submit  多个任务的提交

        shutdown 是等效于Pool中的close+join, 是指不允许再继续向池中增加任务,然后让父进程(线程)等待池中所有进程执行完所有任务

    .

        如何吧多个任务扔进池中?

       

        不同的方式提交多个任务(for+submit 或者 map),拥有不用拿结果的方式

          如果是for+submit的方式提交任务,拿结果用result方法

          如果是map的方式提任务,结果是一个生成器,采用__next__()的方式去拿结果

        关于回调函数,不管是Pool进程池的方式,还是ProcrssPoolExecutor的方式开启进程池

          回调函数都是由父进程调用

        关于回调函数,ThreadPoolExecutor

          回调函数是谁调用??????

  • 相关阅读:
    UVA 10617 Again Palindrome
    UVA 10154 Weights and Measures
    UVA 10201 Adventures in Moving Part IV
    UVA 10313 Pay the Price
    UVA 10271 Chopsticks
    Restore DB後設置指引 for maximo
    每行SQL語句加go換行
    种服务器角色所拥有的权限
    Framework X support IPV6?
    模擬DeadLock
  • 原文地址:https://www.cnblogs.com/jerry-hou/p/12051689.html
Copyright © 2011-2022 走看看