多线程与网络编程

线程池

为什么要使用线程池?
   1.反复创建线程开销大
   2.过多的线程会占用太多的内存

线程池的重要性:
   1.用少量的线程——避免内存占用过多
   2.让这部分线程都保持工作,且可以反复执行任务——避免生命周期的损耗
   3.加快响应速度
   4.合理利用CPU和内存
   5.统一管理

线程池适合应用的场景:
  服务器接受到大量请求时,使用线程池技术非常的合适,它可以大大减少线程的创建和销毁次数,提高服务器的工作效率
  实际上,在开发中,如果需要创建5个以上的线程,那么就可以使用线程池来管理

线程增减的时机

  • corePoolSize核心线程数
     线程池在完成初始化后,默认情况下,线程池中并没有任何线程,线程池会等待有任务到来时,再去创建新线程去执行任务
  • maxPoolSize对大线程数
     在核心线程的基础上,额外增加的线程数的上限
  • keppAliveTime存活时间
     如果线程池当前的线程数多于corePoolSize,那么如果多余的线程空闲时间超过keepAliveTime,它们就被终止
  • ThreadFactory 创建线程
     默认使用Executors.defaultThreadFactory()
     创建出来的线程都在同一个线程组里
     如果自己指定ThreadFactory ,那么就可以改变线程名、线程组、优先级、是否守护线程等
  • workQueue工作队列
     直接交接:SynchronousQueue没有队列
     无界队列:LinkedBlockingQueue无限队列
     有界队列:ArryBlockingQueue设置队列大小

添加线程的规则
在这里插入图片描述

1.如果线程小于corePoolSize,创建一个新线程来运行新任务
2.如果线程数等于或大于corePoolSize但小于maxPoolSize,则将任务放入队列
3.如果workQueue队列已满,并且线程数小于maxPoolSize,则创建一个新线程
4.如果workQueue队列已满,并且线程数大于或等于maxPoolSize,则拒绝
在这里插入图片描述
增减线程的特点

  • 通过设置corePoolSize和maxPoolSize相同,就可以创建固定大小的线程池。
  • 线程池希望保持较少的线程数,并且只有在负载变得很大时才增加它
  • 通过设置maxPoolSize为很高的值,可以允许线程容纳任意数量的并发任务
  • 只有在队列填满时才创建多于corePoolSize的线程,如果使用的是无界(无限)队列,那么线程数就不会超过corePoolSize

线程池应该手动创建还是自动创建
手动创建更好,因为可以更加明确线程池的运行规则,避免资源耗尽的风险。1.newFixedThreadPool(固定数量)自动创建容易造成大量内存占用,可能会导致OOM。
2.newSingleThreadExecutor当请求堆积的时候,可能会占用大量内存
3.newCachedThreadPool(可缓存)弊端在于maximunPoolSize设置为了Integer.MAX_VALUE,这可能会创建非常多的线程,导致OOM。
4.newScheduledThreadPool(周期执行)
在这里插入图片描述

线程池里的线程数量设定为多少比较合适?

  • CPU密集型(加密、计算hash等):最佳线程数为CPU核心数的1-2倍左右。
  • 耗时IO型(读写数据库、文件、网络读写等):最佳线程数一般会大于CPU核心数很多倍
  • 参考Brain Goetz计算方法:线程数=CPU核心数*(1+平均等待时间/平均工作时间)

线程池还未学完!!!!!!!

分布式

什么是分布式?
利用物理架构形成多个自治的处理元素,不共享主内存,但是通过发送信息合作——Leslie Lamport
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CAP定理

CAP是什么?
C一致性:读操作是否总能读到前一个写操作的结果
A可用性:非故障节点应该在合理的时间内做出合理的响应
P分区容错:当出现网络分区现象后,系统能够继续运行(必须有)

CAP怎么选?

  1. 因为P必须有,所以只能选CP或AP
  2. 在什么场合,可用性高于一致性?
  3. 一般关于钱财的选CP,官网选AP

集群、分布式、微服务的区别

  • 分布式:一个业务拆分多个子业务,部署在不同的服务器上。分布式是系统部署方式(物理)
  • 集群:同一个业务,部署在多个服务器上,分散压力
  • 微服务:分散能力,微服务是架构设计方式(逻辑)

网络编程


每个线程一个连接,一个连接大概占用1兆。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值