好久没有用过多线程相关的东西了,这次准备回头再复习一遍。
相信很多朋友学习多线程都会有个疑惑, 这么个东东 什么场景才会用得到?
先不说什么时候用,咱们先来思考一个问题,为什么要用多线程?
看过多线程的朋友都知道,多线程在运行中,也是互相抢占cpu资源,只有抢占到资源的才能运行。 到这里有些人可能就要疑惑了,既然互相抢占,那跑一个和跑多个 时间不应该是相同的吗? 按照数学算法确实是这个样子,1+1=2 永远成立。
但是有时候程序中,并不是一直在跑代码,可能会有一些响应,一些输入操作等。
举个例子:
(单线程)
有一组农民甲乙丙丁需要耕田8小时,只有一辆车。如果按照 一个一个排序进行耕种,既甲耕种完了8小时,然后轮到乙使用,依次类推,最后给丁使用。 假设每个人耕种过程中都会休息吃饭上厕所2小时,那么每次当休息吃饭上厕所的时间,车都在空闲中,别人不能使用。最后四个人全部耕种完的时间位40小时。
(多线程)
还是这个耕田,如果换成甲乙丙丁私人抢车,谁抢到谁就可以耕地。如果甲抢到车,他就先去耕地,当他休息吃饭上厕所时,乙丙丁再次重新抢车,新抢到那个可以耕地,依次类推。那么整个过程车没有空闲时间,最后所有耕种完毕的时间为32小时。(纯粹举例,为方便理解,不考虑切换线程消耗的资源)
资源得到了充沛的利用,运转效率大大的提高。减少互相等待的时间。
好了,什么场景才会用得到多线程?
1. 充分利用cpu资源(基本优点)
2. 当程序需要等待网络、IO响应等导致消耗大量执行时间时,可以采用异步多线程的方式来减少程序等待时间,提高程序运行效率。