处理并发

来源:互联网 发布:凯撒和众信 知乎 编辑:程序博客网 时间:2024/05/29 04:44


处理并发

   实际上并发编程也确实很难,如果说写好同步代码的难度为5,那么并发编程的难度可以达到100。这并不是危言耸听,很多看似稳定的程序,在面对并发场景的时候仍然可能出现问题:比如最近我们就碰到了一个linux kernel在调用某个系统函数时由于同步问题而出现crash的情况。

  而是否高质量的实现并发编程的关键并不是是否应用了某种同步策略,而是看代码中是否保护了共享资源:

  • 局部变量之外的内存访问都有并发风险(比如访问对象的属性,访问静态变量等)
  • 访问共享资源也会有并发风险(比如缓存、数据库等)。
  • 被调用方如果不是声明为线程安全的,那么很有可能存在并发问题(比如java的hashmap)。
  • 所有依赖时序的操作,即使每一步操作都是线程安全的,还是存在并发问题(比如先删除一条记录,然后把记录数减一)。

  前三种情况能够比较简单的通过代码本身分辨出来,只要简单培养一下自己对于共享资源调用的敏感度就可以了。

  但是对于最后一种情况,往往很难简单的通过看代码的方式看出来,甚至出现并发问题的两处调用并不是在同一个程序里(比如两个系统同时读写一个数据库,或者并发的调用了一个程序的不同模块等)。但是,只要是代码里出现了不加锁的,访问共享资源的“先做A,再做B”之类的逻辑,可能就需要提高警惕了。

0 0
原创粉丝点击