收藏 400-998-9776 转2 服务时间 周一至周日 9:00-23:00 注意:本站不提供境外服务
您的位置:首页 >文章内容
何为线程死锁?如何避免多线程发生死锁情况?
来源:互联网 作者:admin 时间:2019-03-09 15:35:43

  多线程的使用,让网络爬虫可以快速的获取到信息,因此不管是什么项目,获取哪些数据,只要获取的数据量比较大,都是需要使用多线程的,但是使用多线程有个问题,那就是容易死锁。


  何为线程死锁?


  所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。举个例子:


  2个人一起吃饭但是只有一双筷子,2人轮流吃(同时拥有2只筷子才能吃)。某一个时候,一个拿了左筷子,一人拿了右筷子,2个人都同时占用一个资源,等待另一个资源,这个时候甲在等待乙吃完并释放它占有的筷子,同理,乙也在等待甲吃完并释放它占有的筷子,这样就陷入了一个死循环,谁也无法继续吃饭。


何为线程死锁?如何避免多线程发生死锁情况?


  在计算机系统中也存在类似的情况。例如,某计算机系统中只有一台打印机和一台输入设备,进程P1正占用输入设备,同时又提出使用打印机的请求,但此时打印机正被进程P2所占用,而P2在未释放打印机之前,又提出请求使用正被P1占用着的输入设备。这样两个进程相互无休止地等待下去,均无法继续执行,此时两个进程陷入死锁状态。


  如何避免多线程发生死锁情况?


  1.设定等待时间


  如果两个线程使用 thread join 无限期互相等待也会造成死锁,我们可以设定等待的最大时间来避免这种情况。


  2.避免嵌套锁


  这是死锁最常见的原因,如果您已经持有一个资源,请避免锁定另一个资源。如果只使用一个对象锁,则几乎不可能出现死锁情况,比如以下代码对上边的循环嵌套部分进行修改,则避免了死锁的情况:


何为线程死锁?如何避免多线程发生死锁情况?


  3.锁定部分资源


  只获对需要的资源加锁,例如在上面的程序中,我们锁定了完整的对象资源,但是如果我们只需要其中一个字段,那么我们应该只锁定那个特定的字段而不是完整的对象


  对于多线程的使用,我们要小心线程死锁的问题,若是能避免,可以更加高效率的使用多线程,避免影响爬虫的抓取工作。故,我们在编写爬虫代码时要注意合理化,否则使用了代理IP也是不管用了。


相关文章内容简介
推荐阅读
  • 09 2019-03
    何为线程死锁?如何避免多线程发生死锁情况?

    多线程的使用,让网络爬虫可以快速的获取到信息,因此不管是什么项目,获取哪些数据,只要获取的数据量比较大,都是需要使用多线程的,但是使用多线程有个问题,那就是容易死锁。

  • 19 2019-01
    常见的反网络爬虫以及突破方法

    大家可能不知道,互联网中超过一半的流量是网络爬虫贡献的,若是网站不设置反爬虫机制,可能根本没法运营,于是都设置了各种各样的反爬虫机制,即使如此,网络爬虫还是有办法去突破。

  • 15 2018-12
    如何破解验证码?验证码可以自动识别,难倒的反而是自己

    随着手机APP的不断增多,使用验证码的几率非常大,有些手机还支持验证码自动获取,即在APP发送验证码,手机短信受到后,可以自动识别填写在APP中,这是什么原理?

  • 07 2019-05
    智连代理苹果版换IP软件下载

    很多使用智连代理的用户,不知道智连代理苹果版换IP软件下载,今天,小编就来给大家说一下,智连代理IOS版最新版怎么下载安装的吧,希望能对大家有所帮助。

  • 30 2018-10
    在贴吧发帖要注意些什么 怎么预防被删贴

    贴吧是个比较大的平台,用户比较多,所发的信息容易被收录,获得好的排名,所以一直都是网络营销人员的重要的平台。想在贴吧引流,肯定是要多宣传自身品牌,留有联系方式...

  • 06 2019-03
    面对反爬虫超级多的网站,爬虫怎么突破这些限制?

    以前各个网站都比较喜欢网络爬虫的光顾,但是随着大数据时代的到来,带着各种各样任务到网站爬取信息的网络爬虫变得不受欢迎了,还被各种限制,有些网站的反爬虫机制还特别的严。