Java并发编程之多线程的优缺点
[TOC]
概述
多线程优点
方便高效的内存共享多进程下内存共享比较不便,且会抵消掉多进程编程的好处
较轻的上下文切换开销不用切换地址空间,不用更改CR3寄存器,不用清空TLB
线程上的任务执行完后自动销毁
多线程缺点
开启线程需要占用一定的内存空间(默认情况下,每一个线程都占512KB)
如果开启大量的线程,会占用大量的内存空间,降低程序的性能
线程越多,cpu在调用线程上的开销就越大
程序设计更加复杂,比如线程间的通信、多线程的数据共享
归纳总结
综上得出,多线程不一定能提高效率,在内存空间紧张的情况下反而是一种负担,因此在日常开发中,应尽量
不要频繁创建,销毁线程,使用线程池
减少线程间同步和通信(最为关键)
避免需要频繁共享写的数据
合理安排共享数据结构,避免伪共享(false sharing)
使用非阻塞数据结构/算法
避免可能产生可伸缩性问题的系统调用(比如mmap)
避免产生大量缺页异常,尽量使用HugePage
可以的话使用用户态轻量级线程代替内核线程
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 麦溪·在路上!
评论
ValineDisqus