2.2Android调研
来源:互联网 发布:淘宝菜鸟驿站 编辑:程序博客网 时间:2024/06/05 06:49
经常看到这个东西,称在调研,就看看。先极力推荐个帖子https://zhuanlan.zhihu.com/p/23488863,没看多少,感觉感触良多。总结下呗。
问题来源,也就是我现在用的,来一个客户端,我要开2个线程(一个负责发,一个负责收),客户端一多,1000个咋办,
1:像Java的线程栈一般至少分配512K~1M的空间,如果系统中的线程数过千,恐怕整个JVM的内存都会被吃掉一半;
2:线程的创建和销毁成本很高,在Linux这样的操作系统中,线程本质上就是一个进程。创建和销毁都是重量级的系统函数。
3:线程的切换成本是很高的。操作系统发生线程切换的时候,需要保留线程的上下文,然后执行系统调用。如果线程数过高,可能执行线程切换的时间甚至会大于线程执行的时间,这时候带来的表现往往是系统load偏高(系统负载)、CPU sy(sy 内核空间占用CPU百分比)使用率特别高(超过20%以上),导致系统几乎陷入不可用的状态。
4:容易造成锯齿状的系统负载。因为系统负载是用活动线程数或CPU核心数,一旦线程数量高但外部网络环境不是很稳定,就很容易造成大量请求的结果同时返回,激活大量阻塞线程从而使系统负载压力过大。
因此有了NIO。
然后先是提了Reactor模式,推荐这个链接的理解http://daimojingdeyu.iteye.com/blog/828696。假如没理解错的话,比喻得挺到位的。
优点都在说,缺点的话,我觉得不适合传大东西吧,因为他不开多线程,传大东西的时候,其他响应就慢了吧。
推荐:http://blog.csdn.net/u010168160/article/details/53019039。原理上差不多理解,但是这个代码,依旧不是很理解。
提到了Proactor,http://blog.csdn.net/caiwenfeng_for_23/article/details/8458299,评论里说对IO的讲解有问题,以我现在的水平,还是不太理解。。慢慢再深入吧。
最后,NIO存在的问题
使用NIO != 高性能,当连接数<1000,并发程度不高或者局域网环境下NIO并没有显著的性能优势。
NIO并没有完全屏蔽平台差异,它仍然是基于各个操作系统的I/O系统实现的,差异仍然存在。使用NIO做网络编程构建事件驱动模型并不容易,陷阱重重。
推荐大家使用成熟的NIO框架,如Netty,MINA等。解决了很多NIO的陷阱,并屏蔽了操作系统的差异,有较好的性能和编程模型。
总结
最后总结一下到底NIO给我们带来了些什么:
事件驱动模型
避免多线程
单线程处理多任务
非阻塞I/O,I/O读写不再阻塞,而是返回0
基于block的传输,通常比基于流的传输更高效
更高级的IO函数,zero-copy
IO多路复用大大提高了Java网络应用的可伸缩性和实用性
也是,一开始的理解,大多会模糊点,看后期的项目考验了。
- 2.2Android调研
- Android平台安全性调研
- android自动化测试报告调研
- Calabash-android调研
- android支付平台调研
- Android Otto调研
- Android 浏览器开发调研
- 2.1Android调研
- 2.3Android调研
- Android现有播放器(调研)
- android流媒体播放方案调研
- android支付平台集成调研
- android支付平台集成调研
- Android短信广播监听调研
- android支付平台集成调研
- android支付平台集成调研 .
- Android自动化测试工具调研
- android支付平台集成调研 .
- springBoot + hibernate + Druid + MySQL + servlet(jsp)
- java搬运工——IO流
- SQL练习(一)
- Liux查看日志的简单方法
- 容斥原理(组合数学)总结
- 2.2Android调研
- 3.1—字符串—Valid Palindrome
- leetcode 513. Find Bottom Left Tree Value
- node
- [自用]门户网站模板-招标公告
- java SE总结
- AI将带我们去何方?(下-展望篇)
- 解读STM32单片机:代码实现 PCROP清除
- innerHTML与innerText区别