所有内容均为个人见解,不喜来喷。
下面所有内容均在单核单cpu情况下讨论。
不考虑I/O,执行任务相同的情况下,并发要比串行多消耗上下文切换的时间,因此单线程比多线程要快。上面这种情形(没有I/O)或者I/O较少的情况,我们称之为计算密集型(CPU-bound)任务,这种任务适合单线程。
与计算密集型任务相对的,就是IO密集型(I/O bound)任务。由于存在I/O阻塞的问题,线程在执行过程中需要等待。比如我们要获取10个网络资源,每个网络资源需要5s。如果使用单线程的话,总共需要50s才能完成任务,而如果使用多线程的话,我们开启10个线程,忽略线程开启的时间,完成任务总共需要5s。因此对于IO密集型任务,适合采用多线程。
结论:计算密集型任务适合单线程,IO密集型任务适合多线程。
网友评论