并发编程学习一

简介: 并发编程学习一

关键信息作为笔记记录一下。

1、重要模型:信号量模型,管程模型。管程是解决并发问题的万能钥匙(暂时还不是特别理解)。

2、并发编程可以总结为三个核心问题:分工、同步、互斥。(并发包的设计可从这三个角度去划分)分工:指的是如何高效地拆解任务并分配给线程;同步:指的是线程之间如何协作;互斥:则是保证同一时刻只允许一个线程访问共享资源。

分工:

Executor、Fork/Join、Future;

生产者-消费者、Thread-Per-Message、Worker Thread;

同步:

CountDownLatch、CyclicBarrier、Phaser、Exchanger;

互斥:(可理解线程安全)锁

synchronized、Lock(ReadWriteLock、StampedLock)、无锁数据结构;

无锁数据结构是如何实现:乐观锁?

性能+安全性

安全性同时尽量提高性能:Thread Local 和 final,Copy-on-write ;原理是不共享变量 或者变量只允许读。

3、线程安全,而导致不确定的主要源头 是可见性问题、有序性问题和原子性问题;

可见性:

一个线程对共享变量的修改,另外一个线程能够立刻看到,我们称为可见性。

缓存的可见性问题:内存与多核CPU缓存;


相关文章
|
2月前
|
存储 安全 Java
并发编程篇
并发编程篇
|
3月前
|
安全 Java 数据库连接
并发编程(二)
并发编程(二)
|
3月前
|
算法 Java Go
并发编程(一)
并发编程(一)
|
3月前
|
Java 调度
并发编程(三)
并发编程(三)
|
Java 编译器 程序员
高并发编程-happens-before
高并发编程-happens-before
94 0
|
前端开发 C++
C++并发编程(下)
C++并发编程(下)
169 0
C++并发编程(下)
|
Ubuntu 大数据 编译器
C++并发编程(上)
C++并发编程
270 0
C++并发编程(上)
|
缓存 监控 安全
聊聊并发编程的10个坑
聊聊并发编程的10个坑
聊聊并发编程的10个坑
|
应用服务中间件 Go PHP
你真的了解并发编程吗?
1、进程和线程 a)进程:是系统进行资源分配和调度的基本单位 i.每一个php脚本被运行都会开启一个进程 1. 在nginx:php-fpm 2. 在apache:CGI b)进程包含线程,线程是我们程序的一个执行单元,负责执行
|
SQL 资源调度 分布式计算
并发编程初探
并发编程初探
113 0
并发编程初探