多线程加锁之后不就是单线程了吗
突然灵机一动想到:多线程加锁之后不就是单线程了吗,其实在学java的时候老师应该有讲过,但是都忘记了。
Q: 多线程 lock 之后不就是单线程了吗?
答:lock并不需要锁定所有的操作。操作共享资源的时候,才需要锁定。如:
string 下载Url; lock (list) { 下载Url = 取出Url(list); // 1毫秒锁定,只能一个线程 } 下载到硬盘(下载Url); // 需要2秒,这里可以多线程下载。
个人理解:由于锁定时只用了1毫秒,在下载东西时,cpu就可以执行另外的线程,进而表现出很快,而单线程在执行下载到硬盘的指令时,cpu并没有被利用,所以速度会很慢。
转:https://bbs.csdn.net/topics/392019228