美文网首页
并发的原因

并发的原因

作者: x1wan | 来源:发表于2018-12-24 17:13 被阅读5次

    可能造成并发执行的原因如下:

    1、中断,中断几乎可以在任何时刻异步发生,也就是可能随时打断当前正在执行的代码。

    2、软中断和tasklet,内核能在任何时刻唤醒或调度软中断和tasklet,打断当前正在执行的代码。

    3、内核抢占,因为内核具有抢占性,所以内核中的任务可能会被另一个任务抢占。

    4、睡眠及与用户空间的同步,在内核执行的进程可能会睡眠,这就会唤醒调度程序,从而导致调度一个新的用户进程执行。

    5、对称多处理,两个或多个处理器可以同时执行代码。


    中断一般指硬中断,由硬件触发的中断,一般指中断的上半部分,一般运行在中断上下文中。

    软中断,tasklet,工作队列是三种中断的下半部分,tasklet是由软中断实现的,软中断和tasklet一般运行在中断上下文中,但如何软中断较多,内核也会创建软中断线程处理它们,这时候它们就运行在内核的进程上下文中,工作队列运行在进程上下文中。进程上下文还分为内核空间和用户空间。

    单核多线程的情况虽然是伪并发,但是由于调度也会出现多个线程交叉运行的情况,如果交叉运行在临界区也会出现竞争,所以多线程程序无论多少核都应该同步问题。

    一些简单的规则对避免死锁大有帮助:按顺序加锁;不要重复请求同一个锁;加锁方案力求简单,越复杂的加锁方案越有可能造成死锁,Linux提供了一些简单易用的调试工具,可以在运行时检测死锁,另外还要防止放生饥饿。

    锁的粒度不是越细越好,之前一直有误解。当锁争用严重时,加锁太粗容易成为性能瓶颈;而当锁争用不明显时,加锁太细会加大系统开销,带来浪费,也会影响性能。在设计初期加锁方案应该力求简单,当需要时进一步细化方案。

    相关文章

      网友评论

          本文标题:并发的原因

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