美文网首页
线程同步异步nio总结

线程同步异步nio总结

作者: feiai | 来源:发表于2018-01-30 11:54 被阅读0次

    线程模型:同步 n,异步 2n,nio n+1,aio n (os thread  execute user thread then os can callback execute new other user thread

    BIO模型

    同步阻塞

    在服务器端:有专门的客户连接 接收器Acceptor,当有新的客户端连接到达后,Acceptor负责第一步连接,然后给每一个客户端连接创建一个新的线程来处理对应的业务;处理完成后,通过输出流返回给客户端,并将线程销毁,这也是最典型的一对一服务模型。一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销。

    伪异步IO

    通过线程池机制优化了BIO模型


    nio模型

    同步非阻塞

    是当一个连接创建后,不需要对应一个线程,这个连接会被注册到多路复用器上面,所以所有的连接只需要一个线程就可以搞定,当这个线程中的多路复用器进行轮询的时候,发现连接上有I/O请求时,才开启一个线程进行处理,也就是一个请求一个线程模式。服务器实现模式为一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

     打开ServerSocketChannel,监听客户端连接

     绑定监听端口,设置连接为非阻塞模式

     创建Reactor线程,创建多路复用器并启动线程

     将ServerSocketChannel注册到Reactor线程中的Selector上,监听ACCEPT事件

     Selector轮询准备就绪的key

     Selector监听到新的客户端接入,处理新的接入请求,完成TCP三次握手

     设置客户端链路为非阻塞模式

     将新接入的客户端连接注册到Reactor线程的Selector上,监听读操作,读取客户端发送的网络消息

     异步读取客户端消息到缓冲区

     对Buffer编解码,处理半包消息,将解码成功的消息封装成Task

     将应答消息编码为Buffer,调用SocketChannel的write将消息异步发送给客户端

    http://blog.csdn.net/nyyjs/article/details/76209036

    aio模型

    异步非阻塞

     与NIO不同,当进行读写操作时,只须直接调用API的read或write方法即可。这两种方法均为异步的,对于读操作而言,当有流可读取时,操作系统会将可读的流传入read方法的缓冲区,并通知应用程序;对于写操作而言,当操作系统将write方法传递的流写入完毕时,操作系统主动通知应用程序。  即可以理解为,read/write方法都是异步的,完成后会主动调用回调函数。 

    http://zhangming04.iteye.com/blog/2328030

    https://www.cnblogs.com/charlesblc/p/6072827.html

    相关文章

      网友评论

          本文标题:线程同步异步nio总结

          本文链接:https://www.haomeiwen.com/subject/puaqzxtx.html