NIO/Concurrent包/zookeeper/Avro-Concurrent(一)

  1. 同步、异步、阻塞、非阻塞区别
    1. 同步:执行一个操作后,等待结果,然后才继续执行后续的操作
    2. 异步:执行一个操作后,可以去执行其它的操作,然后等待通知再回来执行刚才没执行玩的操作
    3. 阻塞:进程给CPU传达一个任务之后,一直等待CPU处理完成,然后才执行后面的操作
    4. 进程给CPU传达任务后,继续处理后续的操作,隔断时间再来询问之前的操作是否完成。这样的过程其实也叫轮询。
    5. 阻塞、非阻塞、多路IO复用,都是同步IO,异步必定是非阻塞的,所以不存在异步阻塞和异步非阻塞的说法。真正的异步IO需要CPU的深度参与。换句话说,只有用户线程在操作IO的时候根本不去考虑IO的执行全部都交给CPU去完成,而自己只等待一个完成信号的时候,才是真正的异步IO。所以,拉一个子线程去轮询、去死循环,或者使用select、poll、epool,都不是异步。
  2. Concurrent包时JDK1.5提工的一个用域应对高并发的包主要包含:BlockingQueue、ConcurrentMap、ExecutorService、Lock、Atomic操作

  3. BlockqingQueue阻塞式队列

    1. BlockqingQueue是阻塞式队列的顶级接口

    2. 不同以往的队列,BlockqingQueue一般是有界限的

    3. 在队列为空的时候进行获取操作会产生阻塞

    4. 在队列已满的情况下继续存储元素会产生阻塞

    5. 遵循先进先出(FIFO)的原则

    6. 适用于生产消费模型

    7. 重要方法

       

      抛出异常

      返回特殊值

      阻塞

      定时阻塞

      队列已满时,添加

      add(o)

      offer(o)

      put(o)

      offer(o, time, unit)

      队列为空时,获取

      remove()

      poll()

      take()

      poll(time, unit)

       

      8.ArrayBlockqingQueue-阻塞式顺序队列

      1. 在使用的时候需要指定容量/界限
      2. 底层基于数组来存储数据
      3. 容量在指定之后不能改动
      4. 遵循先进先出(FIFO)的原则

      9.LinkedBlockqingQueue-阻塞式链式队列

      1. 在使用的时候可以指定容量也可以不指定容量
      2. 如果不指定荣来给你,则荣来给你默认为interger.MAX_VALUE,此时认为容量是无限的
      3. 如果指定容量,则容量指定之后不可该百年
      4. 底层基于节点(链表)来存储数据
      5. 遵循先进先出(FIFO)的原则

      10.PriorityBlockqingQueue-阻塞式优先级队列

      1. 在使用的时候可以指定也可以不指定
      2. 如果不指定,则默认为11
      3. 如果指定容量则指定后不可改变
      4. 在指定容量的时候,最大不能超过Integer.MAX_VALUE-8
      5. PriorityBlockingQueue要求存储的元素对应的类必须实现Comparable接口,重写其中的compareTo方法来指定比较规则
      6. PriorityBlockingQueue在存储元素的时候会根据指定的比较规则对元素进行排序
      7. PriorityBlockingQueue在迭代的时候不保证元素的排序顺序
        示例
        public class PriorityBlockingQueueDemo {
         
            public static void main(String[] args) throws Exception {
         
                // 创建队列
                PriorityBlockingQueue<Student> queue = new PriorityBlockingQueue<>();
         
                // 添加元素
                queue.put(new Student("Amy", 16));
                queue.put(new Student("Bob", 25));
                queue.put(new Student("Cathy", 20));
                queue.put(new Student("David", 13));
         
                // 遍历队列
                // 需要注意的是,如果想要拿到排序的结果,不能以迭代的方法获取
                for (int i = 0; i < 4; i++) {
                    System.out.println(queue.take());
                }
         
            }
         
        }
         
        class Student implements Comparable<Student> {
         
            private String name;
            private int age;
         
            public Student(String name, int age) {
                super();
                this.name = name;
                this.age = age;
            }
         
            @Override
            public String toString() {
                return "Student [name=" + name + ", age=" + age + "]";
            }
         
            // 在这个方法中指定比较规则
            // 根据学生的年龄进行升序排序
            @Override
            public int compareTo(Student o) {
                return this.age - o.age;
            }
         
        }
        
        六、SynchronousQueue - 同步队列
        	1. 容量默认为1,并且只能为1,因此只能存储1个元素
        	2. 如果该队列已有一个元素,则试图向队列中新添一个新元素的线程将会阻塞,直到另一个线程将该元素从队列中抽走
        	3. 如果该队列为空,则试图从队列中抽取一个元素的线程将会阻塞,直到另一个线程向队列中添加了一个新的元素
        	4. 一般会将同步队列称之为是数据的汇合点
        
        七、BlockingDeque - 阻塞式双向队列
        	1. BlockingDeque继承了BlockingQueue
        	2. 在使用的时候,也是需要指定容量的
        	3. 该队列称之为双向队列,即队列的两端都可以添加元素,也可以从队列的两端获取元素
        

         

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
GeoPandas是一个开源的Python库,旨在简化地理空间数据的处理和分析。它结合了Pandas和Shapely的能力,为Python用户提供了一个强大而灵活的工具来处理地理空间数据。以下是关于GeoPandas的详细介绍: 一、GeoPandas的基本概念 1. 定义 GeoPandas是建立在Pandas和Shapely之上的一个Python库,用于处理和分析地理空间数据。 它扩展了Pandas的DataFrame和Series数据结构,允许在其中存储和操作地理空间几何图形。 2. 核心数据结构 GeoDataFrame:GeoPandas的核心数据结构,是Pandas DataFrame的扩展。它含一个或多个列,其中至少一列是几何列(geometry column),用于存储地理空间几何图形(如点、线、多边形等)。 GeoSeries:GeoPandas中的另一个重要数据结构,类似于Pandas的Series,但用于存储几何图形序列。 二、GeoPandas的功能特性 1. 读取和写入多种地理空间数据格式 GeoPandas支持读取和写入多种常见的地理空间数据格式,括Shapefile、GeoJSON、PostGIS、KML等。这使得用户可以轻松地从各种数据源中加载地理空间数据,并将处理后的数据保存为所需的格式。 2. 地理空间几何图形的创建、编辑和分析 GeoPandas允许用户创建、编辑和分析地理空间几何图形,括点、线、多边形等。它提供了丰富的空间操作函数,如缓冲区分析、交集、并集、差集等,使得用户可以方便地进行地理空间数据分析。 3. 数据可视化 GeoPandas内置了数据可视化功能,可以绘制地理空间数据的地图。用户可以使用matplotlib等库来进一步定制地图的样式和布局。 4. 空间连接和空间索引 GeoPandas支持空间连接操作,可以将两个GeoDataFrame按照空间关系(如相交、含等)进行连接。此外,它还支持空间索引,可以提高地理空间数据查询的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宰祖宣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值