精华内容
下载资源
问答
  • 实际上,在Java中,您应该基本上尽可能地尝试使用java.util.concurrent满足您的需求(这在很多情况下都会使用非阻塞并发性,但是在大多数情况下您不必明确担心)。只有在没有其他选项的情况下,应该使用同步包装器(....

    What is Non-blocking Concurrency and

    how is it different.

    正式:

    In computer science, non-blocking

    synchronization ensures that threads

    competing for a shared resource do not

    have their execution indefinitely

    postponed by mutual exclusion. A

    non-blocking algorithm is lock-free if

    there is guaranteed system-wide

    progress; wait-free if there is also

    guaranteed per-thread progress.

    (wikipedia)

    非正式:非阻塞与阻塞的最有利的特征之一是线程不必被操作系统挂起/唤醒。这样的开销可以达到1ms到几十ms,所以删除这个可能是一个很大的性能增益。在java中,这也意味着您可以选择使用非公平的锁定,这可以比公平锁定具有更多的系统吞吐量。

    I have heard that this is available

    in Java. Are there any particular

    scenarios we should use this feature

    是的,来自Java5。实际上,在Java中,您应该基本上尽可能地尝试使用java.util.concurrent满足您的需求(这在很多情况下都会使用非阻塞并发性,但是在大多数情况下您不必明确担心)。只有在没有其他选项的情况下,应该使用同步包装器(.synchronizedList()等)或手动同步关键字。这样一来,大部分时间都可以使用更可维护,更好的应用程序。

    当有很多争用时,非阻塞并发特别有利。当您需要阻止(公平锁定,事件驱动的东西,最大长度等等)等等时,您不能使用它,但是如果不需要它,则在大多数情况下,非阻塞并发往往更好。

    Is there a difference/advantage of

    using one of these methods for a

    collection. What are the trade offs

    两者都有相同的行为(字节码应该相等)。但是我建议使用Collections.synchronized,因为它更短=更小的空间拧紧!

    展开全文
  • java中的并发是什么发布时间:2020-06-10 19:20:22来源:亿速云阅读:190作者:鸽子并发是什么并发:是指在某个时间段内,多任务交替的执行任务。当有多个线程在操作时,把CPU运行时间划分成若干个时间段,再将时间...

    java中的并发是什么

    发布时间:2020-06-10 19:20:22

    来源:亿速云

    阅读:190

    作者:鸽子

    并发是什么?

    并发:是指在某个时间段内,多任务交替的执行任务。当有多个线程在操作时,把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行。 在一个时间段的线程代码运行时,其它线程处于挂起状。

    在并发环境下,程序的封闭性被打破,出现以下特点:

    ● 并发程序之间有相互制约的关系。直接制约体现为一个程序需要另一个程序的计算结果;间接体现为多个程序竞争共享资源,如处理器、缓冲区等。

    ● 并发程序的执行过程是断断续续的。程序需要记忆现场指令及执行点。

    ● 当并发数设置合理并且CPU拥有足够的处理能力时,并发会提高程序的运行效率。

    在并发环境中,当一个对象可以被多个线程访问到时,会造成该对象可以被任何访问到的线程进行修改,从而出现数据不一致的情况。所以提出线程安全的概念。

    并发和并行

    是十分容易混淆的概念。并发指的是多个任务交替进行,而并行则是指真正意义上的“同时进行”。实际上,如果系统内只有一个CPU,使用多线程时,在真实系统环境下不能并行,只能通过切换时间片的方式交替进行,从而并发执行任务。真正的并行只能出现在拥有多个CPU的系统中。

    为什么要用到并发?

    并发编程在一定程度上离不开多核CPU的发展。随着单核CPU的研发已经不能遵循“摩尔定律”(摩尔定律是硬件发展的观测定律,另外还有基于“摩尔定律”的“反摩尔定律”,不过“反摩尔定律”是软件领域的定律,有兴趣的可以自行了解),硬件工程师们为了进一步提升计算速度,而不是再追求单独的计算单元,而是将多个计算单元整合到了一起,也就是形成了多核CPU。短短十几年的时间,家用型CPU,比如Intel i7就可以达到4核心甚至8核心。而专业服务器则通常可以达到几个独立的CPU,每一个CPU甚至拥有多达8个以上的内核。

    因此,“摩尔定律”似乎在CPU核心扩展上继续得到体验。而在多核的CPU的背景下,催生了并发编程的趋势,通并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升。

    在特殊的业务场景下先天的就适合于并发编程。比如在图像处理领域,一张1024X768像素的图片,包含达到78万6千多个像素。即时将所有的像素遍历一边都需要很长的时间,面对如此复杂的计算量就需要充分利用多核的计算的能力。

    另外在开发购物平台时,为了提升响应速度,需要拆分,减库存,生成订单等等这些操作,就可以进行拆分利用多线程的技术完成。面对复杂业务模型,并行程序会比串行程序更适应业务需求,而并发编程吻合更能这种业务拆分正是因为这些优点,使得多线程技术能够得到重视,也是一名CS学习者应该掌握的:

    ● 充分利用多核CPU的计算能力;

    ● 方便进行业务拆分,提升应用性能

    并发编程有哪些缺点?

    1、频繁的上下文切换

    时间片是CPU分配给各个线程的时间,因为时间非常短,所以CPU不断通过切换线程,让我们觉得多个线程是同时执行的,时间片一般是几十毫秒。

    每次切换时,需要把当前的状态保存起来,以便能够进行恢复先前状态,而这个切换行为非常损耗性能,过于频繁切换反而无法发挥出多线程编程的优势。通常减少上下文切换可以采用无锁并发编程、 CAS算法、使用最少的线程和使用协程。

    无锁并发编程:可以参照的ConcurrentHashMap锁分段的思想,不同的线程处理不同段的数据,这样在多线程竞争的条件下,可以减少上下文切换的时间。

    CAS算法,利用原子下使用CAS算法来更新数据,使用了乐观锁,可以有效的减少一部分不必要的锁竞争带来的上下文切换

    使用最少线程:避免创建不需要的线程,比如任务很少,但是创建了很多的线程,这样会造成大量的线程都处于等待状态

    协程:在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换

    由于上下文切换是个相对比较耗时的操作,所以在 “Java的并发编程的艺术” 一书中有过一个实验,并发累加未必会比串行累加速度快。

    2、线程的安全性问题

    多线程编程中最难以把握的就是临界区线程安全问题,稍微不注意就会出现死锁的情况,一旦产生死锁就会造成系统功能不可用。

    展开全文
  • 什么是数据库的并发性

    千次阅读 2010-03-01 16:21:00
    数据库最大的特点数据共享。即可以同一时间供多个用户根据自己的需要来操作数据库。我们生活中的许多数据库应用系统都同一时刻允许各个用户执行不同的操作。比如:火车票售票系统、飞机订票系统、银行系统、超市...

    数据库最大的特点是数据共享。即可以同一时间供多个用户根据自己的需要来操作数据库。我们生活中的许多数据库应用系统都是同一时刻允许各个用户执行不同的操作。比如:火车票售票系统、飞机订票系统、银行系统、超市管理系统等等。 数据库中最小的工作单元是事务。事务可以一个一个顺序执行,即某一时刻只能执行一个事务,其他事务必须等到当前事务运行结束之后才能运行。这种类型的事务价值不大,因为造成了计算机资源的闲置。比如一个事务在运行过程中需要CPU资源,而此时I/O资源、可能闲置。为了充分提高系统的执行效率,最大限度的利用计算机中的资源,多个事务并发执行更具有价值,这就叫做事务的并发性。事务的并发方式有多种。一种是运行在单处理器系统中。这种并发方式主要是在单处理器系统中同时运行多个事务,多个事务共享一个CPU资源,从而提高CPU的利用率,这种并发方式其实还是多个事务轮流使用CPU,不过因为CPU的速度很快,看起来像是多个事务在同时执行。另一种是在多处理器方式中,即存在多个CPU,每个CPU可以同一时刻执行一个或多个事务。 数据库的并发性提高了数据库的运行效率,但是也带来了很多意想不到的后果。比如某个事务在修改一条数据,此时也有可能另外一个事务在删除这一条数据,这就造成了数据的不一致性,为了解决这个问题数据库系统提供并发性的同时还提供了并发控制机制。数据库的并发性及并发控制都是衡量数据库系统性能的重要标准。

    展开全文
  • 术语并发和并行性通常用于多线程...因此,我决定在这个Java并发教程中添加一个关于并发性与并行性的文本。并发并发意味着应用程序同时在多个任务上同时进行。那么如果计算机只有一个CPU,应用程序可能不会在同一时间...

    术语并发和并行性通常用于多线程程序。但是,并发和并行性究竟是什么意思呢,它们是相同的术语还是什么?

    简短的答案是“不”。它们不是相同的术语,尽管它们在表面上看起来非常相似。也花了我一些时间来终于找到并了解并发和并行性之间的区别。因此,我决定在这个Java并发教程中添加一个关于并发性与并行性的文本。

    并发

    并发意味着应用程序同时在多个任务上同时进行。那么如果计算机只有一个CPU,应用程序可能不会在同一时间在多个任务上进行进展 ,但是在应用程序内一次处理多个任务。在下一个开始之前,它不完全完成一项任务。

    60a7f9f840cfa30ba0479fef0a49ed72.png

    并行

    并行性意味着应用程序将其任务分解成更小的子任务,可以并行处理,例如在多个CPU上同时进行处理。

    e05226bd99642e72b09853e61507c4b5.png

    并发性与并行性细节

    正如你所看到的,并发性与应用程序如何处理它所处理的多个任务有关。应用程序可以在时间(顺序)处理一个任务或同时处理多个任务(并发)。

    另一方面,并??行性与应用程序如何处理每个单独的任务有关。应用程序可以从头到尾连续地处理任务,或将任务分解成可以并行完成的子任务。

    你可以看到,应用程序可以是并发的,但不是并行的。这意味着它同时处理多个任务,但任务不会分解为子任务。

    应用程序也可以是并行的,但不是并发的。这意味着应用程序一次只能在一个任务上工作,并且该任务被分解成可并行处理的子任务。

    另外,应用程序既可以并发也不能并行。这意味着它一次只能执行一个任务,并且任务不会被分解为并行执行的子任务。

    最后,一个应用程序也可以并发和并行,因为它同时在多个任务上工作,并且还将每个任务分解成子任务并行执行。但是,在这种情况下,并发和并行性的一些好处可能会丢失,因为计算机中的CPU已经保持合并繁忙,并发或并行性。结合它可能只会导致小的性能增益甚至性能损失。在盲目采用并行并行模型之前,请确保分析和测量。

    原文:http://www.cnblogs.com/EasonJim/p/7023543.html

    展开全文
  • 原子性是指一个操作是不可中断的,要么全部执行成功要么全部执行失败,有着“同生共死”的感觉。即使在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程所干扰。 java内存模型中定义了8中操作都是原子...
  • Java并发是什么

    2020-04-21 17:24:15
    一条线程指的进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 多线程程序包含两个或多个可同时运行的部分,每个部分可以同时处理不同的任务,从而能更好地利用可用资源...
  • 并发基础综述:CPU多级缓存:缓存一致、乱序执行优化Java内存模型:JMM规定、抽象结构、同步八种操作及规则Java并发的优势与风险并发与高并发基本概念基本概念并发:同时拥有两个或者多个线程,如果程序在单核...
  • 并发是什么并发:是指在某个时间段内,多任务交替的执行任务。当有多个线程在操作时,把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行。 在一个时间段的线程代码运行时,其它线程处于挂起状。在...
  • 术语并发和并行性通常用于多线程...因此,我决定在这个Java并发教程中添加一个关于并发性与并行性的文本。并发并发意味着应用程序同时在多个任务上同时进行。那么如果计算机只有一个CPU,应用程序可能不会在同一时间...
  • #1楼并发性:具有共享资源潜力的多个执行流例如:两个线程争用一个I / O端口。平行主义:将问题分成多个相似的块。例如:通过在文件的每半部分上运行两个进程来解析大文件。#2楼并发指两个或多个任务可以在重叠的...
  • 1.定义:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在调用代码中不需要额外的同步或协调,这个类都能表现出正确...2.法则1:无状态的对象(类)永远线程安全的。
  • 什么是并发

    2012-02-26 16:36:08
    定义:  在操作系统中,指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。... 并发环境下,由于程序的封闭...
  • 当一个用户进行访问的时候,不存在并发性问题的。因为用户查询库表,修改访问次数,不会受到别人的影响。 但是当两个用户访问的时候,在查询库表的时候,假定两个用户顺序的。第一个登陆进来,完成了修改登陆...
  • 并发问题(二)什么是并发

    千次阅读 2018-03-31 15:51:40
    1. 什么是并发操作?并发操作指同一时间可能有多个用户对同一数据进行读写操作.2. 并发操作对数据的影响如果对并发操作不做任何控制的话,会造成数据的不完整。可能造成读脏数据,不可重复读,丢失修改还有幻...
  • 要快速准确的发现并解决这些问题,首先就是要弄清并发编程的本质,并发编程要解决的是什么问题。本文将带你深入理解并发编程要解决的三大问题:原子、可见、有序。补充知识硬件的发展中,一直存在一个矛盾,...
  • 在传统的并发模型中,基于内存分享,各线程通信,需要通过共享变量以及锁的同步机制。并且共享变量很麻烦,要保证: 内存可见,保证其他线程可以看到修改后的值 原子 Go语言的并发编程 Go语言里有同步的包,...
  • 当程序中可能出现并发的情况时,就需要保证在并发情况下数据的准确,以此确保当前用户和其他用户一起操作时,所得到的结果和他单独操作时的结果一样的。这种手段就叫做并发控制。 没有做好并发控制,就可能导致...
  • 我们都在大学期间或以其他方式了解并行性/并发性。 任何学习编程的人都不可避免地会阅读/学习一些基本概念,例如, 线程,线程组,线程状态 种族条件,互斥,死锁,饥饿 锁,障碍,线程局部变量,原子变量 ...
  • 以下内容转自...但是,并发和并行究竟是什么意思呢,它们是相同的术语还是什么? 简短的答案是“不”。它们不是相同的术语,尽管它们在表面上看起来非常相似。也花了我一些时间来终于找到并了解并发和并...
  •  高并发是一种系统运行过程中遇到的一种“短时间内遇到大量操作请求”的情况,主要发生在web系统集中大量访问或者socket端口集中收到大量请求(例如:12306的抢票情况;天猫双十一活动)。该情况的发生会导...
  • ConcurrentHashMap把实际map划分成若干部分来实现它的可扩展和线程安全。这种划分使用并发度获得的,它ConcurrentHashMap类构造函数的一个可选参数,默认值为16,这样在多线程情况下就能避免争用。 ...
  • 对数据化的指标没有概念:不清楚选择什么样的指标来衡量高并发系统?分不清并发量和 QPS,甚至不知道自己系统的总用户量、活跃用户量,平峰和高峰时的 QPS 和 TPS 等关键数据。 设计了一些方案,但是细节掌握...
  • 它是一种以一致性规则为基础的逻辑属性,例如在转账的操作中,各账户金额必须平衡,这一条规则对于程序员而言是一个强制的规定,由此可见,一致性与原子性是密切相关的。事务的一致性属性要求事务在并发执行的情况下...
  • Java 并发性

    2013-10-27 16:43:37
    1. 学习 Java 并发性的基础知识 线程和进程 Java 并发编程中的基本执行单位。每一个进程具有至少一个线程,并且同一个进程中的所有线程共享其资源。了解线程的好处,以及为什么必须安全地使用它们。 ...
  • 1 Q:什么是并发编程 A: 首先,提到并发,不得不提一下并行的概念。 并发指:同一个时间段内多个任务同时在执行。并行指:单位时间内多个任务同时执行。二者的区别主要在于,并发的多个任务在某个单位时间,不一定...
  • 迭代器在遍历数据的时候一个Segment一个Segment去遍历的,如果在遍历完一个Segment时正好有一个线程在刚遍历完的Segment上插入数据,就会体现出不一致。 clear也一样。 get方法在取数据的时候,如果有一个线程...
  • 从简单的HTML生成可点击文本,基于NCSA,然后Apache Web服务器,到全球超过20亿用户使用的永远在线的通信媒体,它已经有了很大的发展。随着永久连接的PC,移动设备和最近的平板电脑的激增,互联网领域正在迅速变化...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,260
精华内容 4,104
关键字:

并发性是什么