正在加载中...
扫码关注慕课网服务号
干货分享
定期活动
课程优惠
专栏福利
官方优惠福利活动一手掌握,关注慕课网(ID:imooc-com),和50万+程序员一起成长!
下载慕课网APP
更好的体验,让阅读随处可得
扫描二维码,下载慕课网APP
- 网络编程之Netty一站式精讲
如无法下载使用图片另存为
下载海报
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单线程处理业务逻辑),还是需要另建业务线程池的。