并发编程的目的是让程序跑的更快,但并非启动更多的线程,这个程序就跑的更快。有如下几种挑战。算法
单核CPU上执行多线程任务,经过给每一个线程分配CPU时间片的方式来实现这个机制。时间片是CPU分配给每一个线程运行的时间,时间片很是短,CPU经过不断的切换线程执行,给咱们人类留下的印象就是多个线程在同时执行。数据库
因为线程有建立和上下文切换的开销,当整个程序内部操做数不高的状况下,并发执行可能比串行执行来的慢。编程
尽量下降上下文切换的次数,有助于提升并发效率。多线程
并发编程中的另外一挑战是死锁,会形成系统功能不可用。死锁是指两个或两个以上的进程或者线程在执行过程当中,因为竞争资源或者因为彼此通讯而形成的一种阻塞的现象。并发
避免死锁的常见方法:高并发
好比说带宽只有2Mb/s,你下载速度是1Mb/s,开10个线程速度也不会变成10Mb/s。书中提到在并发编程时须要考虑到资源上的限制。若是受制于资源,好比我数据库链接数就10个,你每次用完都新建线程来作链接,总体程序的速度确定会慢下来。线程
解决的方法有如下几点:协程
根据资源的限制,灵活的去调整并发度。进程