JUC学习-5-浅谈线程上下文切换原理

JUC学习-5-上下文切换

一、提高并发:

由于现在大多数的计算机都是多核CPU,多线程往往会比单线程更快,更能够提高并发。但提高并发并不意味着启动更多的线程来执行。更多的线程意味着线程创建销毁开销加大,上下文非常频繁,程序反而不能支持更高的TPS(Transactions Per Second 指每秒能处理的事务数量)。

二、时间片:

多任务系统往往需要同时执行多道作业,作业数往往大于机器的CPU数,然而一颗CPU同时只能执行一项任务,如何让用户感觉这些任务是在同时进行的呢?操作系统的设计者 巧妙地利用了时间片轮转的方式

CPU调度器先去执行线程A,时间片执行完毕以后挂起线程A,再去执行线程B,时间片执行完毕以后挂起线程B,再去执行线程C...,从而达到多线程“宏观角度”看是在同时执行。

image

三、总结:

  1. (单个CPU)同一时间,cpu只能处理一个线程,只有一个线程在执行
  2. 多线程同时执行:是CPU快速的在多个线程之间切换
  3. CPU调度线程的时间足够快,就造成了多线程的“同时”执行
  4. 如果线程数非常多,cpu会在n个线程之间切换,消耗大量的cpu资源
  5. 每个线程被调度的次数会降低,线程的执行效率降低

四、建议

  1. 合理设置线程数 可以最大化利用CPU,又可以减少线程切换的开销
  2. 高并发、低耗时的情况,建议少线程
  3. 低并发、高耗时的情况,建议多线程(上传 文件浏览... 把文件进行拆分 并发上传)
  4. 高并发、高耗时的情况,要分析任务类型、增加排队、加大线程数
posted @ 2025-06-24 09:13  skystrivegao  阅读(19)  评论(0)    收藏  举报