1.开篇

作者: 炫迈哥 | 来源:发表于2017-04-19 21:39 被阅读0次

多线程的优势

  • 当拥有多核处理器时,每条线程只能占用一个cpu,多线程可以充分发挥多cpu的威力;
  • 即便是在单核处理器上,多线程处理io频繁的工作时(io进行中处理器会处于空闲状态),多条线程同时执行可以充分利用这个空闲时间片,提高系统吞吐率,像nodejs这样单线程基于事件队列异步处理的方式就是这个道理。
  • 不是很重要的:使更加简单,把不同的任务划分在不同的线程中执行(以人类思考问题的方式),把任务自身的执行,任务什么时候需要同步,什么节点需要汇总等分离开形成单独的问题。
  • 。。。。

带来的风险

竞态条件:当多个线程竞争访问同一个资源时,如果对访问顺序敏感,就称存在竞态条件。
最常见的静态条件:

  • 先检查后执行,如延迟初始化(如:单例)
    jvm虚拟机栈,每一个线程运行时都有一个线程栈,

线程先从主存拷贝数据到本地内存,读写都在本地内存中进行,在某个时刻(线程退出或者什么)将变化的值写回主存。

  • 安全性问题(永远不发生糟糕的事情):由于竞态条件导致对共享数据的操作完全无法预期
  • 活跃性问题(某件正确的事情最终会发生):当某个操作无法继续进行下去永久停留在那里了,就产生了活跃性问题。单线程中的死循环就是一种情况,多线程中有以下常见的几种情况:

1.死锁。多条线程相互等待对方释放锁,形成死锁。产生的四个必要条件:1)互斥,锁只能由一条线程持有,2)不可抢占,一条线程持有时,另外的线程不能强制剥夺 3)请求另外的锁时依然保持已经持有的锁(哲学家就餐问题,拿不到其他的锁,就一起释放现有的所有锁,就是避免产生这个条件的) 4)循环等待,形成环状等待锁的链路。(详细内容后续会有)
2.活锁,任务没有被阻塞,由于不满足某个条件一直重试,失败,重试,失败。(有可能自行解开的)
3.饥饿,由于线程优先级关系或者一些其他不公平的竞争条件,导致一些低优先级的线程永远也无法被执行。

  • 性能问题:
  1. 上下文切换代价大,cpu消耗在线程调度上(”保存线程A的执行现场“然后”载入线程B的执行现场”)
  2. 锁粒度太大导致并发性能降低无限接近于单线程。
  3. 会抑制一些编一起的优化操作,如指令重排序等,同步共享主存,所有读写都会作用在主存上,增加了共享内存主线上的流量。

相关文章

  • 1.开篇

    多线程的优势 当拥有多核处理器时,每条线程只能占用一个cpu,多线程可以充分发挥多cpu的威力; 即便是在单核处理...

  • 1.开篇

    安达市坐落在全国最有名的油城大庆和省城哈尔滨中间,地理位置优越,公路铁路都是东北地区 最发达的路段。安达市...

  • 1.开篇说明

    刚写完一篇技术文章,转过来写一篇音乐相关的文章,其实会感觉比较轻松。技术的文章,总是讲求逻辑,严谨,科学,最佳实践...

  • 《落樱缤纷》【1.开篇】

    我是你心上的圆月,你是我月上的明星———夜深月 我从被窝里爬起来,用手挡了挡窗外灿烂的阳光,抓过桌上的手机看时间,...

  • 1.机器学习入门-开篇

    人工智能,就像长生不老和星际漫游一样,是人类最美好的梦想之一,单提及就让人感觉兴奋! 今天开始入坑机器学习,hel...

  • 集体智慧编程系列-1.开篇

    本人java出身,百度web攻城尸一枚,以为自己这一辈子都只和web对干,突然有一天被老大叫到小黑屋里后出来立马华...

  • 【连载】《宇宙技法师》- 1. 开篇

    崂山脚下,一对师徒,正在练习技法。幼徒问师傅。 “老师,老师,什么叫自然啊?”小萝卜头问道。“自然啊,自然就是一种...

  • 1.荣格心理学(开篇)

    自从诞生那日起,人类从未停止过对心灵秘密的探索,就像从未停止过对自然界秘密的探索一样。在过去的时代里,人们...

  • Bootstrap0828

    Bootstrap 1.概念 01-Bootstrap开篇 ...

  • 1. 数据结构和算法之开篇

    1. 前言 对于一名有追求的程序猿来说,数据结构和算法是一门必修课,它是内功,内功的深厚直接决定了解决问题的能力和...

网友评论

      本文标题:1.开篇

      本文链接:https://www.haomeiwen.com/subject/bxddottx.html