美文网首页我爱编程
漫谈程序中的同步

漫谈程序中的同步

作者: ww4u | 来源:发表于2018-04-13 09:51 被阅读0次

同步是程序中的一个常见困扰,虽然常见,但不见得都能合适的处理,也就有了性能和健壮性的差异。
一般的理解,同步意味着“性能损失”,我们希望能稍微改善一下这个观点,这种“性能”可能指的是实验室的性能,只具有参考价值,没有实际应用意义。
什么是实际意义?解决具体问题的应用,标称XXXGB/s的指标,能在实际中真正落地,并稳定工作才有参考价值。实际应用中的指标往往和标称值有数量级的差异,这是难以避免的,应用千差万别。所以,在应用稳定前不要过多谈及指标,性能。
理想情况下,大家都希望活在一个自己的世界里,顺序执行,周而往复。很不幸的是,这种程序只能存在于教科书上,实际应用中往往需要和其他人的沟通和协调,沟通就是同步。

下面我们来分析一个具体的案例

状态切换过程的同步

  • 应用程序有IDLE/CALCEND等几个状态
  • IDLE表示空闲
  • CALCEND表示计算结束
    大致的转换过程是这样的


    image.png

    还是很复杂的

会产生什么样的问题

  • 状态的切换过程不是原子操作
  • 状态切换没有及时进行,也就是没有在指定的指令下进行立即切换

具体地

  • 如果在计算CALCEND中再次下发数据
  • 下发的数据并没有及时处理切换状态
  • 状态仍旧是CALCEND
  • 如果这时来查询状态,就区分不开是之前的END还是已经END

怎么改?

  • 同步查询动作,即返回的数值一定是之前的设置生效后的数值
    • 对于这个应用在END中,收到数据就需要立即进入CALCLING
  • 强制从END回到IDLE,即必须经历IDLE->CALCING->CALCEND的过程

相关文章

  • 漫谈程序中的同步

    同步是程序中的一个常见困扰,虽然常见,但不见得都能合适的处理,也就有了性能和健壮性的差异。一般的理解,同步意味着“...

  • 教学常规漫谈(老王唠教育)之219

    教学常规漫谈 之219(0220) 今天继续说说说课方法中的说课的准备方法。 3.把握说课程序 说课中的“程序”...

  • 【程序员漫画】猜猜他是谁?

    关注【漫谈程序员】,通过漫画讲述咱程序员自己的故事……

  • Barrier与多线程

    程序世界的barrier 同步屏障(Barrier)是并行计算中的一种同步方法。对于一群进程或线程,程序中的一个同...

  • js事件循环机制

    程序开始执行之后,主程序开始执行同步任务,碰到异步任务就把它放到任务队列中,等到同步任务全部执行完之后,js引擎就...

  • python协程(yield、asyncio标准库、gevent

    引言 同步:不同程序单元为了完成某个任务,在执行过程中需靠某种通信方式以协调一致,称这些程序单元是同步执行的。 例...

  • 2017/5/22 同步程序代码

    同步程序: 入口:SyncDataQuartz 以客户为例:在客户同步中添加一个字段,要修改:CstInfo:添加...

  • 同步程序

    rsync -avuzP

  • java中死锁的问题

    死锁。 死锁的原因:同步中嵌套同步,多个进程同时抢到不同的锁,都在等待,互不相让 在该程序中, 假如线程0在r...

  • 同步&异步,阻塞&非阻塞

    1.同步/异步,阻塞/非阻塞的区别 同步/异步是侧重与程序间的消息通信机制。 同步意味着程序发起调用一直同步等待直...

网友评论

    本文标题:漫谈程序中的同步

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