永发信息网

C#和Java的多线程主要有哪些不同

答案:2  悬赏:0  手机版
解决时间 2021-12-28 01:38
C#和Java的多线程主要有哪些不同
最佳答案
计算机的高速发展,在多核技术上要远远快于提升单核的计算能力。因而设计并发的程序成为提高软件性能的一大利器。
并发的程序虽然可以有效利用硬件资源,但同时也会增加程序设计的难度,其首要解决的就是同步的问题。
同步问题归纳而言就是要解决两个问题:活性失败(liveness failure)和 安全性失败(safety failture)。
  • 活性失败是指,线程A操作的变量c,在线程B中要访问的时候,不是最新的线程A操作赋值后的值。产生此类问题的原因在于现代CPU多采用了高速缓存,高速缓存变成了CPU和内存的中间桥梁,数据的过渡器,而CPU对高速缓存中的数据的修改并不会第一时间刷新到公用的内存中;多个线程运行在不同的CPU的情况下,就有可能出现读取的数据的不新鲜,导致活性失败。
  • 安全性失败,举例来说,线程A在调用某个计算方法, 运算过程处于中间状态时,有参与运算的变量被其他线程修改了值,导致了线程A的这次运算结果错误。这里的问题在于,线程A的这次运算不是一个原子操作,无法保证在运算的整体过程中数据的可控性。此类问题被称作安全性失败。
    解决的办法归纳起来也是两大类
  • 程序设计时,尽量减少跨线程的数据交互,尽量设计可重入的计算方法。
  • 使用各种编程语言提供的同步机制,保证数据在多个线程之间的正确同步。
    对于第一点来说,无论你是用哪种语言,都是一样的。
    那么,针对第二点,让我们来看一下C#和Java在处理同步上的一些大同小异。
    解决活性失败,C#和Java都提供了volatile这个关键字来修饰变量。这个关键字可以让程序运行时对被修饰的变量无条件的在高速缓存和主内存中实现数据同步。使用这个关键字可以解决数据不新鲜的问题,但是切记不可乱用,因为它会带来额外的性能开销,让高速缓存变得没有意义。
    解决活性失败,当然也可以使用各种同步机制,这些同步机制也可以让需要在一起完成的操作不被其他线程打扰,成为原子操作,从而解决安全性失败问题。
    同步大体来说可以分为两种
  • 互斥同步。互斥同步是指,线程A在访问某个竞争资源的时候,其他线程不能访问这个资源而被阻塞。这种方案带来的问题是比较大的性能开销用于线程阻塞和唤醒。这种同步机制其实是一种悲观的同步方案,在操作开始前就假设会有其他线程来抢资源而上锁了。
  • 非阻塞同步。这种同步机制是借助了操作和冲突检测的硬件指令实现的原子操作,实现的乐观同步机制。通俗的说,就是先进行操作,如果没有其他线程在征用共享数据,那操作就成功了,如果产生了冲突,那就不断重试,直到资源被释放。非阻塞同步不会让线程挂起,不需要被唤醒,所以如果在共享资源被短期暂用的情况下,比互斥(阻塞)同步拥有更好的性能。
    在C#和Java中,比较典型的非阻塞同步机制就是自旋锁。
    而同步机制的实现机制则是五花八门。
    由于C#主要应用的平台在于windows,所以基本上它的同步机制都是基于windows的一些同步原语,包括事件,互斥锁,信号量,监视器;当然也有优化后的读写锁,瘦锁等等。
    Java由于是跨平台的,所以提供的同步机制都需要jvm支持。可供选择的同步机制和封装有synchronized, ReentrantLock,CountDownLatch, CyclicBarrier, DelayQueue, PriorityBlockngQueue, ScheduledExecutor, Semaphore, Exchanger.
  • 全部回答
    这个问的太笼统了,我不可能给你长篇大论一帆,不过,我觉得这两种语言之间的过渡学习不难,因为我一开始学java的,现在做的是c#. 他们都是oo语言,遵循的原则都是继承、多态、重载等等。一个通,样样通 无非是关键字和开发工具生成模板不同而已
    我要举报
    如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
    大家都在看
    微软Arc鼠标(无线版非蓝牙)
    由谁买过卡地亚对戒?
    柯达富士乐凯哪个好
    的幸福公式要求:①请先在答题卡上所选题号后
    大三在校生面试实习需要有什么准备?
    谁知道手机钢化贴膜怎么把它拿下来?
    汽车知识·汽车油箱为什么要有左右之分
    三星手机有红外的手机有哪些
    会考二个b四个c算过吗
    金坑生态区生活区地址在哪?我要去那里办事
    最凶猛的动物有什么
    骑马与砍杀怎么跟自己的国王解除关系?
    下列说法正确的是A.0的倒数等于它的相反数B.
    收藏夹删除后如何恢复
    (用所给单词的适当形式填空)1.SARS is a ser
    推荐资讯
    在空调的外机进风口附近晾衣服好不好
    游戏里全是乱码怎么办
    My mother made this cake.=This cake ( )( )
    甲、乙两物体从同一点开始做直线运动,其v-t
    为什么说当今世界任需要联合国?
    多选题下列有关元素锗及其化合物的叙述中正确
    这里concerned为什么加ed?
    梁子湖区民政局地址在哪?我要去那里办事
    办食品求s怎么办
    龙陵县公安局镇安派出所位置在什么地方啊,我
    厦门市殿前派出所地址在哪?我要去那里办事
    上栗县杨岐派出所地址在什么地方?想过去办事
    正方形一边上任一点到这个正方形两条对角线的
    阴历怎么看 ?