为了账号安全,请及时绑定邮箱和手机立即绑定
编程百科手册

扫一扫 手机阅读

精选留言
  • Mr_Raymond

    想问下老师,我想学Netty,手头上正好有《TCP:IP详解:协议卷1》《Java网络编程》,可以直接学Netty呢? 还是先把这两本书看完在学? 或者是边学Netty,遇到不明白的再去针对性的从这两本书里找一些资料呢?

    讲师回答 / 彤哥读源码

    同学,你好,《TCP/IP详解》更偏底层,《Java网络编程》更偏传统的BIO网络通信,Netty更偏向于NIO编程,在计算机领域,往往越是底层的东西越枯燥,如果你想快速入手Java网络编程或者想快速能看懂其他开源框架的源码,我建议先从Netty开始;如果你想把IO/NIO这块的东西都搞明白,可以先看《Java网络编程》再看Netty,同时还要把IO/NIO这块的源码看懂;如果你想深入理解计算机底层关于网络通信这块的处理,可以看看《TCP/IP详解》。

  • qq_达达_14

    通俗易懂,爱了爱了!

    讲师回答 / 彤哥读源码

    爱了爱了~~

  • 慕九州4486665

    讲得非常有趣,给作者点赞!

    讲师回答 / 彤哥读源码

    多谢夸奖,哈哈^^

  • 张三丰1

    "但是它有一个非常大的优点,就是我们始终只有一个线程,并没有启动额外的线程来处理每个连接的事务,解决了 BIO 线程无限增加的问题,所以,NIO 是非常高效的" 这句话不太理解,BIO那个程序完全也可以采用单线程的处理方式啊,这样就不存在创建大量线程的缺点了,这段NIO再消费客服端请求的时候采用的是单线程阻塞的方式,前一章的BIO程序也是可以去掉线程池的,所以从这方面去分析,也看不出谁更高效,因为都是阻塞IO。退一步讲,上一章BIO采用的是线程池,那么处理客服端请求是可以并行处理的,它的性能反而更加的高效才对,这就很矛盾了。

    讲师回答 / 彤哥读源码

    首先,非常感谢您的提问。 然后,请看下面这段代码: while ((msg = reader.readLine()) != null) { System.out.println("receive msg: " + msg); } 始终要记着,我们这里讲的是TCP长连接,如果BIO使用单线程,请思考如何持续地读取多个客户端发送过来的数据?即使使用线程池,假设为10个线程,如何知道哪个客户端发来了数据?

  • 慕粉花小鱼

    看了不少专栏,发现作者的写作风格,非常有意思,赞了

    讲师回答 / 彤哥读源码

    爱了爱了^^

  • MartinCode

    写的不错!

    讲师回答 / 彤哥读源码

    我就当是夸我了^^

  • 慕粉花小鱼

    请问,在IO 多路复用中,委托美女,向美女询问菜好了没有的时候,到底能不能玩手机?

    讲师回答 / 彤哥读源码

    此时,你可以玩手机,但是美女去询问厨房的时候她是阻塞的,到了第二阶段,你去端菜的时候,你就是阻塞的了,就不能玩手机了。两个阶段都是阻塞的,对象不一样。少玩手机多学习,奥力给!

  • 桂林山水甲天下

    嗯非常对 最重要的还是需要掌握底层核心知识,这些核心知识掌握了,学习其他东西真的能事半功倍。老师讲解的源代码和核心原理适合入门学习吗?

    讲师回答 / 彤哥读源码

    可以的,源码注释的非常详细,原理也有大量的图帮助理解,更有Java底层的知识帮助你理解消化。

  • 小爱仙子

    老师写得可以啊,学起来~~

    讲师回答 / 彤哥读源码

    必须滴~~

  • 慕九州4486665

    我的理解: Reactor主从模式和变异的Reactor模式的区别如下: 在我看来好像他俩的唯一区别就是主从模式中,子Reactor将read/send事件与IO处理分开了,IO处理放到了线程池中进行;而变异的Reactor模式则是将read/send事件与IO处理作为一个整体,然后放到线程池中进行; 第一个问题: 我如上的理解正确吗? 第二个问题: 主从和变异的两种方式哪个效率更高呢?为什么Netty选择的是变异的Reactor模式呢?

    讲师回答 / 彤哥读源码

    1. 你的理解是对的,不过概念错了,IO处理是read和send,decode/process/encode是业务处理,将业务处理放到单独的线程池中的好处是,业务处理不会影响到IO事件的处理,线程池也可以起到一定的缓冲作用。2. 默认情况下,我们将IO事件和业务处理放一起,是因为业务处理逻辑非常快,不需要再另建一个线程池专门处理业务。如果业务处理比较耗时(比如,业务有读取数据库、网络IO等耗时操作),或者一些特殊情况(比如,类似于Redis单线程处理业务逻辑),还是需要另建业务线程池的。

正在加载中...

造烛求明,读书求理
扫码关注慕课网服务号
干货分享
定期活动
课程优惠
专栏福利
官方优惠福利活动一手掌握,关注慕课网(ID:imooc-com),和50万+程序员一起成长!

本专栏知识点梳理

1.由易到难,全面搭建网络编程知识体系

2.解析netty各大组件细节,百万级性能调优,体验设计模式实际运用

下载慕课网APP

更好的体验,让阅读随处可得

扫描二维码,下载慕课网APP
意见反馈 帮助中心 APP下载
官方微信