网络编程基础

基本内容:NIO,unix五种网络编程模型,大小端模式,读写缓冲区与死锁,future模式基本雏形

1.NIO与BIO

    BIO:同步阻塞IO。接收一个客户端连接请求时,新建一个线程为该客户端服务;在客户端释放连接前,该线程将一直被该客户端占用;当客户端释放连接时,该线程被销毁。线程数与并发量呈1:1的关系。问题:1.存在高占用问题、2.大量创建/销毁线程的资源消耗、3.服务器响应缓慢,甚至任务排队过久导致超时丢失。

    伪异步IO:在BIO的基础上,用线程池处理任务,避免每个连接都创建一个新线程,可以实现线程的复用。线程数与并发量呈M:N的关系(M<<N)。减少了线程创建/销毁的问题,解决了相应缓慢问题,但仍然不能解决高占用问题,无法应对高并发阻塞场景。

    NIO:同步非阻塞IO,且基于selector实现线程的多路复用,一个线程在生命期间可以为多个客户端服务。线程占用情况也大幅降低。

NIO的3大组件

    1.Channel通道。对原IO的抽象,可以从一个通道读数据或者往这个通道写数据。对通道的读写必须通过Buffer进行。对Channel的读/写操作时非阻塞的。

    2.Buffer缓冲区。实质是一个数组。clean()方法进入写模式:position=0,limit=capicity,position是下一个写入位置,最多能写到limit位置,position<=limit;flip()方法实现从写模式切换到读模式:limit=position,position=0,positon是下一个读位置,最多能读到limit位置,position<=limit。

    3.Selector多路复用器,基于epoll实现。把BIO中多个阻塞集中到一个Selector上,再通过Selector实现分用。

5.future模式基本雏形

两个线程一个共享对象:数据请求线程(业务线程)、数据获取线程(临时辅助线程)、共享数据对象。

   数据请求线程发出数据获取请求,一段时间后从共享数据对象拿数据(最终落到共享对象上)。拿的时候,若数据还没有准备好,则线程阻塞。

   数据获取线程负责具体数据获取,设置共享数据对象的数据,唤醒在共享数据对象上等待的线程。

参:java tcp/ip socket编程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值