丰巢科技
1.bio与nio的区别
1、bio同步阻塞io:在此种式下,户进程在发起个IO操作以后,必须等待IO操作的完成,只有当真正完成IO操作
以后,户进程才能运。JAVA传统的IO模型属于此种式!
2、nio同步阻塞式I/O;java NIO采双向通道进数据传输,在通道上我们可以注册我们感兴趣的事件:连接事件、
读写事件;NIO主要有三核部分:Channel(通道),Buffer(缓冲区), Selector。传统IO基于字节流和字符流进操作,
NIO基于Channel和Buffer(缓冲区)进操作,数据总是从通道读取到缓冲区中,或者从缓冲区写到通道中。
Selector(选择区)于监听多个通道的事件(如:连接打开,数据到达)。因此,单个线程可以监听多个数据通道。
1. BIO (Blocking I/O):同步阻塞I/O模式,数据的读取写必须阻塞在个线程内等待其完成。这使那个经典的烧
开,这假设个烧开的场景,有排壶在烧开,BIO的作模式就是, 叫个线程停在个壶那,直
到这个壶烧开,才去处下个壶。但是实际上线程在等待壶烧开的时间段么都没有做。
2. NIO (New I/O):同时持阻塞与阻塞模式,但这我们以其同步阻塞I/O模式来说明,那么么叫做同步阻
塞?如果还拿烧开来说,NIO的做法是叫个线程断的轮询每个壶的状态,看看是否有壶的状态发改变,从
进下步的操作。
3. AIO ( Asynchronous I/O):异步阻塞I/O模型。异步阻塞与同步阻塞的区别在哪?异步阻塞需个线程
去轮询所有IO操作的状态改变,在相应的状态改变后,系统会通知对应的线程来处。对应到烧开中就是,为每个壶
上装个开关,烧开之后,壶会动通知我烧开。
2.select与poll的区别
1、io多复:
1、概念:IO多复是指内核旦发现进程指定的个或者多个IO条件准备读取,它就通知该进程。
2、优势:与多进程和多线程技术相,I/O多复技术的最优势是系统开销,系统必创建进程/线程,也必
维护这些进程/线程,从减系统的开销。
3、系统:前持I/O多复的系统调有 select,pselect,poll,epoll。
2、select:select前乎在所有的平台上持,其良好跨平台持也是它的个优点。select的个缺点在于单个进程
能够监视的件描述符的数存在最限制,在Linux上般为1024,可以通过修改宏定义甚重新编译内核的式提升
这限制,但是这样也会造成效率的降低。
3、poll:它没有最连接数的限制,原因是它是基于链表来存储的,但是同样有个缺点:
a. 的fd的数组被整体复制于户态和内核地址空间之间,管这样的复制是是有意义。
b. poll还有个特点是“平触发”,如果报告fd后,没有被处,那么下次poll时会再次报告该fd。
epoll跟select都能提供多路I/O复⽤的解决⽅案。在现在的Linux内核⾥有都能够⽀持,其中epoll是Linux所特有,⽽select则
应该是POSIX所规定,⼀般操作系统均有实现。
3.zookeeper的作原
1、定义:zookeeper是种为分布式应所设计的可、性能且致的开源协调服务,它提供项基本服务:分布
式锁服务。后来摸索出其他使法:配置维护、组服务、分布式消息队、分布式通知/协调等。
2、特点:
1、能够在型分布式系统中;
2、具有致性、可性、容错性,会因为个节点的错误崩溃;
3、途:户型分布式系统,作协调服务;
1、分布式锁应:通过对集群进master选举,来解决分布式系统中的单点故障(主n从,主挂全挂)。
2、协调服务;
3、注册中;
4、原:
术语:
数据结构Znode:zookeeper数据采树形层次结构,和标准件系统常相似,树中每个节点被称为Znode;
通知机制Watcher:zookeeper可以为所有的读操作(exists()、getChilden()及getData())设置watch,
watch事件是次性出发,当watch的对象状态发改变时,将会触发次对象上watch所对应的事件。watch事件将被异步的发送
给客户端,并且zookeeper为watch机制提供有序的致性保证。
基本流程:分布式锁应场景
1、传统的主n从分布式系统,容发单点故障,传统解决式是增加个备节点,定期给主节点发送Ping包,主节
点回复ack,但是如果络原因ack丢失,那么会出现两个主节点,造成数据混乱。
2、zookeeper的引可以管两个主节点,其中挂个,会将另外个作为新的主节点,挂的节点回来时担任备节
咕泡学院