首页 > 编程语言 > 详细

多线程操作类对比(Java和C#)

时间:2020-12-13 11:58:25      阅读:23      评论:0      收藏:0      [点我收藏+]
 
C#
Java
备注说明
Semaphore/SemaphoreSlim
Semaphore
 
AutoResetEvent/ManualResetEventSlim
ReentrantLock.newCondition
 
CountdownEvent
CountDownLatch
 
Barrier
CyclicBarrier
 
ReaderWriterLockSlim
ReentrantReadWriteLock
 
volatile
volatile
一样
Task
Future/FutureTask
有一点神似
ThreadLocal
ThreadLocal
 
 
 
C#中带Slim是混合模式,不带的是内核模式。
当线程处于阻塞状态时,只会占用尽可能少的CPU时间。然而,这意味着将引入至少一次所谓的上下文切换( context switch),上下文切换是指操作系统的线程调度器。该调度器会保存等待的线程的状态,并切换到另一个.线程,依次恢复等待的线程的状态。这需要消耗相当多的资源。然而,如果线程要被挂起很,长时间,那么这样做是值得的。这种方式又被称为内核模式(kernel-mode),因为只有操作系统的内核才能阻止线程使用CPU时间。
  万一线程只需要等待一小段时间,最好只是简单的等待,而不用将线程切换到阻塞状,态。虽然线程等待时会浪费CPU时间,但我们节省了上下文切换耗费的CPU时间。该方式又被称为用户模式(user-mode),该方式非常轻量,速度很快,但如果线程需要等待较长时间则会浪费大量的CPU时间。
  为了利用好这两种方式,可以使用混合模式(hybrid),混合模式先尝试使用用户模式等,待,如果线程等待了足够长的时间,则会切换到阻塞状态以节省CPU资源。
 
C#线程池注意:
保持线程中的操作都是短暂的是非常重要的。不要在线程池中放入长时间运行的操作,或者阻塞工作线程。这将导致所有工作线程变得繁忙,从而无法服务用户操作。这会导致性能问题和非常难以调试的错误。
  请注意线程池中的工作线程都是后台线程。这意味着当所有的前台线程(包括主程序线程)完成后,所有的后台线程将停止工作。
 

多线程操作类对比(Java和C#)

原文:https://www.cnblogs.com/Windge/p/14128028.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!