【系统变慢】
当前我们的服务器软件系统主要应用多线程技术实现多任务处理,并完成对很多用户的并发请求处理。简单来说,我们的一个web应用相当于操作系统中的一个进程,该进程中可以创建很多线程,而每个线程处理一个用户请求。在处理多个并发用户请求时。由于系统资源的有限性,从而在执行过程中引发运行时资源的竞争,系统为保证共享资源的线程安全,于是有了加锁的解决方案,即同一时刻只允许一个线程访问共享资源。锁会引起线程阻塞,那么就会出现线程排队等待锁的情况,线程无法并行执行,系统响应速度就会变慢。此外 I/O 操作也会引起阻塞,对数据库连接的获取也可能会引起阻塞。基于以上这些场景,当并发的线程数越多,等待连接的时间也越多,从 web 请求者角度看,响应时间变长,系统变慢。
【应用崩溃】
被阻塞的线程越多,占据的系统资源也越多,这些被阻塞的线程既不能继续执行,也不能释放当前已经占据的资源,在系统中一边等待一边消耗资源,如果阻塞的线程数超过了某个系统资源的极限,就会导致系统宕机,应用崩溃。