线程安全集合和并行计算介绍 | 学习笔记

简介: 快速学习线程安全集合和并行计算介绍

开发者学堂课程【Scala 核心编程 - 进阶线程安全集合和并行计算介绍学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/610/detail/9063


线程安全集合和并行计算介绍


基本介绍

所有线程安全的集合都是以 Synchronized 开头的集合

SynchronizedBuffer

SynchronizedMap

SynchronizedPrionity

SynchronizedQueue

SynchronizedSet

SynchronizedStack

理论上来说我们不变的集合依然就实现了线上安全,但是有一个问题?

我们的可变集合他在默认情况下线程安全控制的并不是很好,愿意可变的,基于这个原因我们这个 Synchronized 设计者他也指出可变集合的线上安全,像 Buffer 他提供了 SynchronizedBuffer,也就说线程安全的这种集合会有 Synchronized 打头可以在这个地方进行选用。

并行集合

基本介绍

1.Scaia 为了充分使用多核 CPU,提供了并行集合(有别于前面的串行集合),用于多核环境的并行计算。

传统的语言并没有真正发现我们 CPU 多核的效率,比如说打开任务管理器里面有个资源监视器。

image.png

这个电脑上有2个 CPU 4个核,这个配置就是很低很低的了,像做大数据一般来讲最少16个核,现在有一个问题,我们怎么充分利用 CPU 呢?

现在很多新的语言都加入对多核 CPU 的调动,那么我们看在这个 Synchronized 里面是直接支持多核 CPU 的调动 。

2.主要用到的算法有:

Divide and conquer:分治算法,Scala 通过 splitters(分解器),combiners(组合器) 等抽象层来实现,主要原理是将计算工作分解很多任务,分发给一些处理器来完成,并将它们处理结果合并返回。

这样我们就真正做到了并发,以前传统的并发只是看起来像并发,其实并不是真正并发,它只是 CPU 调动时间很短,单核你也可以一边上网一边看电影只是 CPU 在不停的调动而已,如果用了这个分治算法,他就可以真正达到多个 CPU 同时计算。

这个调度算法跟这个分治算法它们是相辅相成的,分治算法它可以把任务分解到不同的处理器去,那么问题来了,假如有一个处理器已经很累了,你再把任务交给它一定是不合理的Work stealin 算法,主要用于任务调度负载均衡(load-balancing),通俗点完成自己的所有任务之后,发现其他人还有活没干完,主动(或被安排)帮他人一起干,这样达到尽早干完的目的.他达到这样一个负载均衡的效果。

在学大数据的时,应该会讲到一些调度或者负载均衡的算法,有些公司他会自己开发一些适合他的业务逻辑的调动算法,我们说大数据有2种职位,一种应用工程师,写别人写好的算法,就是别人写好的算法你拿来用,第二种就是自己设计算法,这种就比较高级一点。

应用案例

Paraliel 并行

打印1~5

(1 to 5).foreach(_))

Println()

(1 to 5).par.foreach(println(_))

这个并行计算特别简单,只需要写一个 par 就行了。

相关文章
|
1月前
|
编解码 数据安全/隐私保护 计算机视觉
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
如何使用OpenCV进行同步和异步操作来打开海康摄像头,并提供了相关的代码示例。
84 1
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
|
3月前
|
存储 安全 Java
【Java集合类面试二十五】、有哪些线程安全的List?
线程安全的List包括Vector、Collections.SynchronizedList和CopyOnWriteArrayList,其中CopyOnWriteArrayList通过复制底层数组实现写操作,提供了最优的线程安全性能。
|
9天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
14天前
|
存储 设计模式 分布式计算
Java中的多线程编程:并发与并行的深度解析####
在当今软件开发领域,多线程编程已成为提升应用性能、响应速度及资源利用率的关键手段之一。本文将深入探讨Java平台上的多线程机制,从基础概念到高级应用,全面解析并发与并行编程的核心理念、实现方式及其在实际项目中的应用策略。不同于常规摘要的简洁概述,本文旨在通过详尽的技术剖析,为读者构建一个系统化的多线程知识框架,辅以生动实例,让抽象概念具体化,复杂问题简单化。 ####
|
1月前
|
并行计算 安全 Java
Python 多线程并行执行详解
Python 多线程并行执行详解
66 3
|
1月前
FFmpeg学习笔记(二):多线程rtsp推流和ffplay拉流操作,并储存为多路avi格式的视频
这篇博客主要介绍了如何使用FFmpeg进行多线程RTSP推流和ffplay拉流操作,以及如何将视频流保存为多路AVI格式的视频文件。
171 0
|
3月前
|
调度
多线程学习笔记
这篇文章是多线程学习笔记,涵盖了线程与进程的概念、多线程实现方式、线程状态、线程同步与不安全示例、死锁问题以及生产者与消费者问题等多线程编程的关键知识点。
多线程学习笔记
|
3月前
|
算法 Java
JUC(1)线程和进程、并发和并行、线程的状态、lock锁、生产者和消费者问题
该博客文章综合介绍了Java并发编程的基础知识,包括线程与进程的区别、并发与并行的概念、线程的生命周期状态、`sleep`与`wait`方法的差异、`Lock`接口及其实现类与`synchronized`关键字的对比,以及生产者和消费者问题的解决方案和使用`Condition`对象替代`synchronized`关键字的方法。
JUC(1)线程和进程、并发和并行、线程的状态、lock锁、生产者和消费者问题
|
3月前
|
前端开发 JavaScript 大数据
React与Web Workers:开启前端多线程时代的钥匙——深入探索计算密集型任务的优化策略与最佳实践
【8月更文挑战第31天】随着Web应用复杂性的提升,单线程JavaScript已难以胜任高计算量任务。Web Workers通过多线程编程解决了这一问题,使耗时任务独立运行而不阻塞主线程。结合React的组件化与虚拟DOM优势,可将大数据处理等任务交由Web Workers完成,确保UI流畅。最佳实践包括定义清晰接口、加强错误处理及合理评估任务特性。这一结合不仅提升了用户体验,更为前端开发带来多线程时代的全新可能。
73 1
|
3月前
|
安全 Java
【Java集合类面试十三】、HashMap如何实现线程安全?
实现HashMap线程安全的方法包括使用Hashtable类、ConcurrentHashMap,或通过Collections工具类将HashMap包装成线程安全的Map。

热门文章

最新文章