并发一些概念

进程之间通讯用什么:

  套接字、信号处理器、共享内存、信号量、文件。

线程之间通讯用什么:

线程的好处:

  降低开发维护成本,提高程序性能,提高资源利用率和系统吞吐量。

线程带来的风险:

线程安全问题:永远不要发生糟糕的事情

线程的活跃性问题:某件正确的事情最终会发生。比如,死锁 饥饿 活锁(不明白)

性能问题:

  上下文切换开销:

    保存和恢复上下文

    丢失局部性

    cpu化时间在线程调度

    线程共享数据时,必须同步,会抑制编译器优化,使内存缓冲区数据失效,增加共享内存总线同步流量。

同步方式:

  synchronized

  volatile

  Explicit Lock

  原子变量

同步问题的解决方式:

  不在线程之间共享状态变量

  将状态变量修改位不可变变量

  在访问状态变量时使用同步

竞态条件:

  不恰当的执行时序而出现不正确的结果叫做竞态条件,Race Condition。

  当某个计算的正确性取决于多个线程交替执行的时序时,就会发生竞态条件。

  常见的竞态条件类型就是先检查后执行(check-then-act),通过一个可能失效的观测结果(重点是这个)来决定下一步的动作的情况。

时间: 2024-10-07 21:13:16

并发一些概念的相关文章

linux内核并发基本概念

在讨论linux内核并发之前,我们先来分享一个情景. 字符数组array是一个内核全局数组,执行函数ArrayWrite_A的线程称为线程A,执行函数ArrayWrite_B的线程称为线程B.线程A和线程B均可访问全局数组array,ArrayWrite_A函数实现的功能是将数组成员依次从0递增赋值到9,ArrayWrite_B函数实现的功能是将数组成员全部赋值为1. 假设此时线程A运行到函数ArrayWrite_A,我们期望的结果是函数ArrayWrite_A执行完后,数组array中的成员应

同步异步,并发并行概念的理解

同步与异步:同步:发送一个请求,等待返回,然后再发送下一个请求 异步:发送一个请求,不等待返回,随时可以再发送下一个请求 同步可以避免出现死锁,读脏数据的发生,一般共享某一资源的时候用,如果每个人都有修改权限,同时修改一个文件,有可能使一个人读取另一个人已经删除的内容,就会出错,同步就会按顺序来修改.异步则是可以提高效率了,现在cpu都是双核,四核,异步处理的话可以同时做多项工作,当然必须保证是可以并发处理的.同步和异步最大的区别就在于.一个需要等待,一个不需要等待. 并发与并行:并发当有多个线

并发编程概念总结

进程 ? 进程是计算机中最小的资源分配单位,进行中的一个程序就是一个进程. 进程需要操作系统来调度,每个程序运行起来的时候需要给分配一些内存,开启关闭切换时间开销大,进程之间数据隔离,进程也有数据不安全的问题 用Lock解决 进程的三状态图: 就绪 运行 阻塞 就绪-->操系统调度 -->运行-遇到io操作->阻塞-阻塞状态结束->就绪 -时间片到了->就绪 进程的调度算法:给所有的进程分配资源或者分配CPU使用权的一种方法. 短作业优先.先来先服务.多级反馈算法 多级反馈算

Java并发基本概念

线程安全的体现 不可变:对象被构建完后,其外部可见状态永远不会改变 绝对线程安全:不管运行环境如何,调用者都不需要任何额外的同步措施 相对线程安全:Java语言中的大部分线程安全类,或通常意义所说的线程安全.其保证单独的操作是安全的,对于一些特定顺序的连续调用,则需要额外的同步措施 线程兼容:Java语言中的大部分类(ArrayList,HashMap等),对象本身并不是线程安全的,但是可以通过在客户端使用同步措施来保证对象在并发环境下安全使用, 线程对立:无论使用哪种同步措施都不能保证线程安全

JAVA并发编程>>概念准备

工于其善,必先利器 1.并发和并行的区别 并行:同一时间点执行多个任务(CPU多核或多个CPU同时执行多个任务) 并发:同一时间段内行多个任务(单核同时执行多个任务) 2.同步和异步的区别 同步:执行某个操作,按顺序执行下去,直到结束. 异步:执行某个操作后,立即离开,等到有返回结果时,回来继续执行. 额,感觉这个描述不怎么正式.但是我认为异步执行就是为了充分利用执行某项操作需要耗费大量时间,而异步就是为了利用这个时间,提高程序本身的执行效率. 3.进程和线程区别 进程:并发执行计算机程序的分配

并发测试概念普及

并发测试分为两种情况: 1.点层面的并发,例如,在中午12点这个时间点,大家同时订午饭 2.线层面的并发,例如,在中午12点到13点这个时间段内,大家可能干不同的事情,但同时都对服务器产生压力. 并发测试不等于性能测试 并发测试不仅存在于性能测试中,希望测试时在考虑是否要做并发测试时,不单单局限于考虑性能需求的角度. 并发测试的分类 并发测试不仅仅是性能测试,它存在于各个测试阶段中,并且测试目的各不相同. (1)对于功能并发测试,要先考虑测试单业务功能场景的并发测试,再进行混合业务功能场景的并发

Storm基本概念以及Topology的并发度

Spouts,流的源头 Spout是Storm里面特有的名词,Stream的源头,通常是从外部数据源读取tuples,并emit到topology Spout可以同时emit多个tupic stream,通过OutputFieldsDeclarer中的declareStream,method来定义 Spout需要实现RichSpout端口,最重要的方法是nextTuple,storm会不断调用接口从spout中取数据,同时需要注意的是Spout分为reliable or unreliable两种

谈论高并发(三)锁的一些基本概念

并发编程概念的一些基本的了解是非常重要的.告诉我们认为表明,在方向上的主要问题. 这个讲锁的一些基本概念. 在正常情况下,我们说的锁都指的是"互斥"锁.因为有一些特殊的锁,例"读写锁",一点都没有互斥. 排斥锁. 锁是处理并发的一种同步手段.单线程程序和并发程序的终于目的都是要保证程序的正确性,可是最大的差别是: 单线程程序的正确性仅仅关注程序的执行结果和目标是一致的 并发程序的正确性除了执行结果正确外,还包括了活性的特性,所谓活性,指的就是程序无死锁,无饥饿 所以

转一篇关于并发和并行概念的好文,附带大神评论

转自:https://laike9m.com/blog/huan-zai-yi-huo-bing-fa-he-bing-xing,61/ 还在疑惑并发和并行? OK,如果你还在为并发(concurrency)和并行(parallesim)这两个词的区别而感到困扰,那么这篇文章就是写给你看的.搞这种词语辨析到底有什么意义?其实没什么意义,但是有太多人在混用错用这两个词(比如遇到的某门课的老师).不论中文圈还是英文圈,即使已经有数不清的文章在讨论并行vs并发,却极少有能讲清楚的.让一个讲不清楚的人来