JUC学习-5-浅谈线程上下文切换原理
JUC学习-5-上下文切换
一、提高并发:
由于现在大多数的计算机都是多核CPU,多线程往往会比单线程更快,更能够提高并发。但提高并发并不意味着启动更多的线程来执行。更多的线程意味着线程创建销毁开销加大,上下文非常频繁,程序反而不能支持更高的TPS(Transactions Per Second 指每秒能处理的事务数量)。
二、时间片:
多任务系统往往需要同时执行多道作业,作业数往往大于机器的CPU数,然而一颗CPU同时只能执行一项任务,如何让用户感觉这些任务是在同时进行的呢?操作系统的设计者 巧妙地利用了时间片轮转的方式
CPU调度器先去执行线程A,时间片执行完毕以后挂起线程A,再去执行线程B,时间片执行完毕以后挂起线程B,再去执行线程C...,从而达到多线程“宏观角度”看是在同时执行。
三、总结:
- (单个CPU)同一时间,cpu只能处理一个线程,只有一个线程在执行
- 多线程同时执行:是CPU快速的在多个线程之间切换
- CPU调度线程的时间足够快,就造成了多线程的“同时”执行
- 如果线程数非常多,cpu会在n个线程之间切换,消耗大量的cpu资源
- 每个线程被调度的次数会降低,线程的执行效率降低
四、建议
- 合理设置线程数 可以最大化利用CPU,又可以减少线程切换的开销
- 高并发、低耗时的情况,建议少线程
- 低并发、高耗时的情况,建议多线程(上传 文件浏览... 把文件进行拆分 并发上传)
- 高并发、高耗时的情况,要分析任务类型、增加排队、加大线程数
本文来自博客园,作者:skystrivegao,转载请注明原文链接:https://www.cnblogs.com/skystrive/p/18945569
整理不易,如果对您有所帮助 请点赞收藏,谢谢~