复习:

  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

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

day39线程的更多相关文章

  1. [ 高并发]Java高并发编程系列第二篇--线程同步

    高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...

  2. [高并发]Java高并发编程系列开山篇--线程实现

    Java是最早开始有并发的语言之一,再过去传统多任务的模式下,人们发现很难解决一些更为复杂的问题,这个时候我们就有了并发. 引用 多线程比多任务更加有挑战.多线程是在同一个程序内部并行执行,因此会对相 ...

  3. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

  4. Java 线程

    线程:线程是进程的组成部分,一个进程可以拥有多个线程,而一个线程必须拥有一个父进程.线程可以拥有自己的堆栈,自己的程序计数器和自己的局部变量,但不能拥有系统资源.它与父进程的其他线程共享该进程的所有资 ...

  5. C++实现线程安全的单例模式

    在某些应用环境下面,一个类只允许有一个实例,这就是著名的单例模式.单例模式分为懒汉模式,跟饿汉模式两种. 首先给出饿汉模式的实现 template <class T> class sing ...

  6. 记一次tomcat线程创建异常调优:unable to create new native thread

    测试在进行一次性能测试的时候发现并发300个请求时出现了下面的异常: HTTP Status 500 - Handler processing failed; nested exception is ...

  7. Android线程管理之ThreadLocal理解及应用场景

    前言: 最近在学习总结Android的动画效果,当学到Android属性动画的时候大致看了下源代码,里面的AnimationHandler存取使用了ThreadLocal,激起了我很大的好奇心以及兴趣 ...

  8. C#多线程之线程池篇3

    在上一篇C#多线程之线程池篇2中,我们主要学习了线程池和并行度以及如何实现取消选项的相关知识.在这一篇中,我们主要学习如何使用等待句柄和超时.使用计时器和使用BackgroundWorker组件的相关 ...

  9. C#多线程之线程池篇2

    在上一篇C#多线程之线程池篇1中,我们主要学习了如何在线程池中调用委托以及如何在线程池中执行异步操作,在这篇中,我们将学习线程池和并行度.实现取消选项的相关知识. 三.线程池和并行度 在这一小节中,我 ...

随机推荐

  1. zk脑裂

    一.为什么zookeeper要部署基数台服务器?二.zookeeper脑裂(Split-Brain)问题2.1.什么是脑裂?2.2.什么原因导致的?2.2.zookeeper是如何解决的?一.为什么z ...

  2. Scala Collection Method

    接收一元函数 map 转换元素,主要应用于不可变集合 (1 to 10).map(i => i * i) (1 to 10).flatMap(i => (1 to i).map(j =&g ...

  3. C++分治策略实现线性时间选择

    问题描述: 给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素,即如果将这n个元素依其线性序排列时,排在第k个的元素即为要找到元素. 细节须知:(与之前的随笔相比) (1 ...

  4. 百度前端技术学院task16源代码

    欢迎访问我的github:huanshen 做这道题目的时候遇到了很多困难. 1.怎么给空对象添加数据,愣是不知道从哪里下手:遍历对象,一个个输出操作: 2.中英文的正则表达式不知道,赶紧去百度: 3 ...

  5. MQTT --- Retained Message

    保留消息定义 如果PUBLISH消息的RETAIN标记位被设置为1,则称该消息为“保留消息”: Broker会存储每个Topic的最后一条保留消息及其Qos,当订阅该Topic的客户端上线后,Brok ...

  6. MOOC python笔记(二)python中的数据类型和基本语句

    python数据类型 数字类型 整数(int) 与数学中整数概念一致(数字大小没有限制,这和其他语言不同),整数可正可负,默认情况下,整数采用十进制.其他进制需要增加相应的引导符号. 如果是二进制在前 ...

  7. PHP-FPM的相关知识的深度解释

    一.需要搞清楚几个名词概念 1.          CGI(Common Gateway Interface,CGI)通用网关接口, 是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展 ...

  8. Elasticsearch 、 Logstash以及Kibana 分布式日志

    搭建ELK日志分析平台(上)—— ELK介绍及搭建 Elasticsearch 分布式集群 ELK简介: ELK是三个开源软件的缩写,分别为:Elasticsearch . Logstash以及Kib ...

  9. 【转载】 使用宝塔Linux面板功能查看服务器内存使用情况

    运维过阿里云服务器或者腾讯云服务器的运维人员都知道,针对占用内存比较高的应用或者服务等,我们需要时刻关注服务器的内存使用率,是否存在内存瓶颈等情况的出现.阿里云和腾讯云官方后台界面的监控数据页面也有相 ...

  10. 阿里sentinel源码研究深入

    1. 阿里sentinel源码研究深入 1.1. 前言 昨天已经把sentinel成功部署到线上环境,可参考我上篇博文,该走的坑也都走了一遍,已经可以初步使用它的限流和降级功能,根据我目前的实践,限流 ...