读书笔记之 《Java并发编程的艺术-第一章》
2017-09-02 00:00
357 查看
前言
并发编程的目的是让程序跑的更快,但并不是启动更多的线程,这个程序就跑的更快。有以下几种挑战。挑战及方案
上下文切换
单核CPU上执行多线程任务,通过给每个线程分配CPU时间片的方式来实现这个机制。时间片是CPU分配给每个线程运行的时间,时间片非常短,CPU通过不断的切换线程执行,给我们人类留下的印象就是多个线程在同时执行。由于线程有创建和上下文切换的开销,当整个程序内部操作数不高的情况下,并发执行可能比串行执行来的慢。
尽可能降低上下文切换的次数,有助于提高并发效率。
无锁并发编程。书中提到多线程竞争锁时会发生上下文切换,所以竟可能避免使用锁
==书中指的应该是为了竞争锁而触发的抢占式上下文切换,因为日常多线程运行也需要上下文切换==,可以通过不同线程处理不同分段的数据来降低。
CAS算法。Java中的Atomic包使用CAS算法来更新数据,不需要加锁**==CAS算法目前还不是很了解==**
使用最少线程。
协程。协程,又称微线程,纤程。英文名Coroutine。指的是在单线程里面实现多任务的调度**==之前在Python和Go里面听过这个概念,不过还没做具体了解。==**
死锁
并发编程中的另一挑战是死锁,会造成系统功能不可用。死锁是指两个或两个以上的进程或者线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象。避免死锁的常见方法:
避免一个线程同时获取多个锁。
尽可能保证一个锁内只占有一个资源。
尝试使用定时锁。
资源限制的挑战
比如说带宽只有2Mb/s,你下载速度是1Mb/s,开10个线程速度也不会变成10Mb/s。书中提到在并发编程时需要考虑到资源上的限制。如果受制于资源,比如我数据库连接数就10个,你每次用完都新建线程来做连接,整体程序的速度肯定会慢下来。解决的方法有以下几点:
对于硬件资源的限制,可以使用集群来跑。
对于软件资源上的限制,可以复用资源,比如复用数据库连接。
根据资源的限制,灵活的去调整并发度。
相关文章推荐
- Java并发编程的艺术开篇(读书笔记)
- java并发编程的艺术,读书笔记第三章
- java并发编程的艺术,读书笔记第六章 concurrentHashMap以及并发容器的介绍
- 【Android开发艺术探索读书笔记】 第一章 Activity的生命周期与启动模式
- Java并发编程艺术----读书笔记(三)
- 读书笔记之《Java并发编程的艺术-第二章》之synchronized
- 《Java并发编程》第一章 — 简介 — 读书笔记
- 《java并发编程的艺术》---第一章:并发编程的挑战
- java并发编程的艺术读书笔记--Java内存模型(1)
- java并发编程的艺术读书笔记--并发机制的底层实现原理
- Java并发编程的艺术读书笔记(2)-并发编程模型
- 读书笔记:软件人才-管理的艺术 推荐
- 第一章 代码无错就是优?简单工厂模式(读书笔记)
- [读书笔记]第一章 PMP引论
- 读书笔记:Android开发艺术探索之第3章 View的事件体系
- Spring实战(第四版)读书笔记——第一章 Spring之旅
- 读书笔记-编写可读代码的艺术[中]
- 《自控力》 【美】凯利·麦格尼格尔 第一章读书笔记
- Java 线程第三版 第一章Thread导论、 第二章Thread的创建与管理读书笔记
- 读书笔记:逆向思考的艺术