浅析多线程

要解释清楚什么是多线程,还是得从多线程产生的根源来探讨!

CPU运行的一个任务叫一个进程,但需要处理的任务绝对不止一个,CPU怎么办呢?它在一个时刻只能执行一个任务,所以,多个任务只能不断地切换执行。

那当我们在执行一个进程的时候,我们发现任务本身各部分并不是同步的,严格按顺序执行的,有些部分之间是需要同时执行的,因此,为了达到这种同时执行的效果,将进程根据实际的任务执行模式细分为线程单元,这些线程单元可以同时运行,避免顺序执行产生的阻塞,不能实现异步效果。

所以说,多线程的产生就是为了解决多个事务需要同时进行的问题,尽可能的实现异步执行的效果,尽管CPU本身每一时刻只能处理一个事务,但是,通过线程间的切换是可以达到同时处理的异步效果的。

那么多线程是否提高了任务整体的处理效率呢?

应该说,不能一概而论,它主要满足了同时进行事务处理的需要,比如,UI是不能因为耗时的内部处理而阻塞的,它必须要与其他的事务同时进行。如果说,多线程真的在提高整体的处理效率上有什么贡献的话,就是充分的利用空闲的CPU资源完成事务的处理,不空闲的时候事务可以往后排,空闲的时候及时的处理掉,比如磁盘IO读写,其实会有CPU资源空闲出来可以做其他的事情。

在UI响应,通信监听上,多线程是必不可少的,它们必须与其他的事务同时进行,不能因为其他事务的处理而被阻塞,这是不合理的。

总而言之,使用多线程其实不单是为了提高处理效率,很大程度上是为了达到异步处理,同时进行的目的,它并没有减少工作量,而只是保证需要同时进行的任务不会相互阻塞,多线程之所以在一定程度上提高了效率,根本原因在于充分的利用了空闲的CPU资源。

那么,在使用多线程的时候需要注意些什么呢?

因为多线程实现了多个事务的同时处理,这就必然产生一些安全问题,在共享资源的处理上就会产生冲突,好比平时人们可以大路朝天各走一边,但是,保不齐哪天就非要过一条独木桥,有人要过来,有人要过去,岂不一首凉凉?

所以,在使用多线程时,一定要注意对共享资源的操作,能不共享的尽量据为己有,如果非要共享,那就只能暂时牺牲一下多线程的异步作用,当多个线程对共享资源进行争夺时,保证一个线程利用完之后,再让其他的线程使用,实现这一目的的方式就是Lock锁,我们可以通过定义全局静态私有对象作为锁,对多线程中共享资源的操作部分都用该锁锁住,一旦有线程占用着该对象锁,其他的线程就无法执行被锁住的代码块而挂起,直到锁被释放。

目前个人使用多线程还是主要解决UI和通信方面的问题,有时候多线程的异步效果并不理想,线程阻塞让人头疼,真是纸上得来终觉浅,觉知此事要躬行啊!

猜你喜欢

转载自blog.csdn.net/upcdxlq/article/details/85222782