- Nio
- 并发开发工具包
- Zookeeper
- Avro序列化框架
- 电信日志分析项目
进程
运行起来的程序就是进程。
从内存维度: 每个进程都独占一块地址空间,cpu处理进程实际上就是处理这个进程内存的首地址到尾地址的数据信息。
从执行的逻辑维度: 每一个进程都可以配cpu所处理和计算,每一个进程也可以挂起,让其他进程得以处理。在每一个时刻,只能有一个进程被cpu处理。(单核)
总结:进程模型,在宏观上是并行处理的,但是微观上,是串行处理的。
时间维度: 每个进程执行一段时间后,肯定都完成了一定的工作量。即进程是随时间向前推进的。
进程状态
- 执行态
挂起态 一个进程由于发生了某些阻塞操作,比如IO操作
一个进程由于执行了很长时间,主动挂起,让其它进程得以处理
用户主动挂起。
进程相当于资源的组织单位,线程是cpu最小的 执行单元。调度算法
FCFS (first come first server) 先来先服务调度算法,处理先来的线程,线程处理完成后再处理下一个来的线程。
- 时间片轮转算法 cpu为多个线程服务,解决了FCFS算法的问题,有限缩短了响应时间,体高了cpu利用率,但是这个算法可能存在缺陷: 短任务处于饥饿状态。
- 短任务优先调度算法: 优先去完成短任务,这个算法的局限性: 可能导致长任务市场处于饥饿状态。
- 优先级调度算法: 为线程分配优先级,优先级高的线程优先被处理,局限性就是优先级低的线程长期处于饥饿状态。
- 混合调度算法: 这个算法把之前算法的有点进行结合,然后线程调度。
#### NIO和BIO - nio 非阻塞式IO,jdk1.4 引入的新I/O, 之前学习的I/O都是BIO,即阻塞式IO。
BIO特点
面向流的: InputStream,OutputStream 字节输入流,字节输出流
Reader,Writer 字符输入流,字符输出流
特点: 流是有方向的、连续不断的
局限性: 不能灵活的 操作流里的数据。
2 阻塞的IO
比如Socket,它的底层是BIO机制。
accept(),connect(),write()调用时会产生阻塞。
阻塞模型的局限性:不可能应对高并发、高访问量的场景。
瞬间产生大量的 线程,创建,销毁都需要浪费大量的服务器资源。
NIO特点
面向缓存区的(Buffer)
NIO是通过缓冲区区操作数据的,可以用缓冲区灵活操作数据。
此外,NIO是面向通道的 Channel,在通道上,即可以读数据,也可以写数据。
缓冲区是运输数据的载体。
2 NIO是非阻塞的IO,可以利用NIO处理高并发和高访问量的场景。