并发的目的是为了程序运行的更快,并不是启动更多的线程就能让程序最大限度地并发执行,但是做好并发编程,需要面临一下问题需要去解决,例如:上下文切换、死锁、资源限制问题
即使是单核处理器,也能执行多线程代码,是通过cpu给每个线程分配时间片来实现这个机制,多个线程中,每个线程会根据时间片获取执行权,来回切换执行权,这样大大浪费时间
如何避免上下文切换
无锁并发编程:意思就是让不同的线程处理不同端的数据
CAS算法:根据进行数据比对,进行更新
使用最少得线程:比如任务很少,但是还是创建很多线程来处理
协程:在单线程实现多任务的调度
如何避免死锁
避免一个线程同时获取多个锁
避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源
尝试使用定时锁,使用lock.tryLock
资源限制的挑战
集群部署
资源循环利用(线程池)