我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:港彩神鹰 > 读入原语 >

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

归档日期:06-17       文本归类:读入原语      文章编辑:爱尚语录

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  16460获赞数:11328本人主要从事C#方向的技术开发工作,具有10多年的各类架构开发工作经验。向TA提问展开全部计算机的高速发展,在多核技术上要远远快于提升单核的计算能力。因而设计并发的程序成为提高软件性能的一大利器。并发的程序虽然可以有效利用硬件资源,但同时也会增加程序设计的难度,其首要解决的就是同步的问题。同步问题归纳而言就是要解决两个问题:活性失败(liveness failure)和 安全性失败(safety failture)。

  活性失败是指,线程A操作的变量c,在线程B中要访问的时候,不是最新的线程A操作赋值后的值。产生此类问题的原因在于现代CPU多采用了高速缓存,高速缓存变成了CPU和内存的中间桥梁,数据的过渡器,而CPU对高速缓存中的数据的修改并不会第一时间刷新到公用的内存中;多个线程运行在不同的CPU的情况下,就有可能出现读取的数据的不新鲜,导致活性失败。

  那么,针对第二点,让我们来看一下C#和Java在处理同步上的一些大同小异。

  互斥同步。互斥同步是指,线程A在访问某个竞争资源的时候,其他线程不能访问这个资源而被阻塞。这种方案带来的问题是比较大的性能开销用于线程阻塞和唤醒。这种同步机制其实是一种悲观的同步方案,在操作开始前就假设会有其他线程来抢资源而上锁了。

  非阻塞同步。这种同步机制是借助了操作和冲突检测的硬件指令实现的原子操作,实现的乐观同步机制。通俗的说,就是先进行操作,如果没有其他线程在征用共享数据,那操作就成功了,如果产生了冲突,那就不断重试,直到资源被释放。非阻塞同步不会让线程挂起,不需要被唤醒,所以如果在共享资源被短期暂用的情况下,比互斥(阻塞)同步拥有更好的性能。

本文链接:http://chuyenchame.com/duruyuanyu/545.html