线程之间上下文切换?
本文最后更新于50 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

CPU通过时间片分配算法来循环执行线程任务,当前任务执行一个时间片后会切换到下一个线程任务。此时,切换前会保存上一个任务的状态,以便于下一次切换回这个任务时,能再加载这个任务的状态。任务从保存到再加载的过程就是一次上下文切换。

上下文切换回影响多线程的执行速度,因此减少线程之间上下文切换会是一个优化方向。常用的方法有:

  • 无锁并发编程:多线程竞争锁时,会引起上下文切换(因为线程在竞争锁时会暂时挂起,而切换线程)。因此可以通过一些方法避免使用锁,比如将数据ID根据Hash算法取模分段,不同线程处理不同段的数据。
  • CAS算法:Java的Atomic使用CAS算法来更新数据,不需要加锁
  • 使用最少线程:避免创建不需要的线程,比如任务少,但创建了大量线程处理,会导致线程处于等待状态
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇