zoukankan      html  css  js  c++  java
  • 数据挖掘_并行并发介绍和同步异步介绍

     

    前面跟大家讲的request s和spynner都是单进程(单线程)的顺序抓取,而并发和并行执行的异步抓取会极大地提高抓取效率。

    并行和并发

    并发和并行使两个相似的概念,并发是指在一个时间段内发生若干事件的情况,并行是指在同一时刻发生若干事件的情况。

    我们可以以CPU的工作方式来说明这两个概念

    单核CPU下,多任务操作系统的各任务是以并发的方式运行的,因为只有一个处理器,所以各任务会以分时的方式在一段事件内分别占用CPU依次执行,如果在自己分得的时间段内没有完成,那么就需要等到下一次得到CPU的使用权时才会继续执行,直到整个任务完成,因为CPU的切换速度很快,所以给我们的感觉就是同时在运行多个任务

    多核CPU下,因为有两个以上(包含两个)可以同时工作的内核,所以就有可能在各个核上运行的任务能同时进行,这就叫做并行

    通过这张图你应该能更好的理解(串行不在我们考虑的范围内)

    同步和异步

    同步和异步的概念,一般会涉及到多个任务或事件的参与。可以在并发或并行的背景下去理解这两个概念

    同步指的是并发或并行发生的各任务之间不是孤立独自运行的,一个任务的进行可能需要在获得另一个任务的给出的结果之后

    或者说是只有一个任务完成或给出一个结果之后,另一个任务在获得这个结果后才能继续运行

    总之,各任务的运行会彼此相互制约,节奏和步调要协调好,否则就会出现错误

    异步指的是并发或并行发生的各任务之间彼此是独立运行的,不受各自的影响,这是异步与同步最主要的区别

    实际工作中如何进行选择

    当需要多个任务互相配合在并发或并行环境中合作完成时,就需要以同步的方式运行

    操作系统是以信号量机制来实现同步的,各类编程语言也在进行并行或并发程序设计时提供了同步机制

    例如Python在多线程设计时的锁机制

    当我们需要将一个大的任务分解成若干个小的子任务时,各子任务可以分别独自完成,彼此之间不需要互相协作,这是就可以考虑使它们异步地并行或异步地并发执行

    这在数据抓取时始终很常见的模式,将若干要抓取的链接分为几组,然后对每组分别使用子任务进行抓取,待各子任务抓取结束后,再将结果进行汇总,完成整个任务

    关于这些概念大概就是这些,如果不是太明白,可以自己查阅资料弄明白

  • 相关阅读:
    IPC框架分析 Binder,Service,Service manager
    Android语音系列:编译Speex框架
    Android核心分析(21)Android应用框架之Android Application
    支付宝 移动支付
    对象、视频、音频的传输RTMP协议研究
    ffmpeg 移植篇笔记
    iPhone UI 设计篇(一)
    Service深入分析
    CSS注意事项
    关于文本断行的样式
  • 原文地址:https://www.cnblogs.com/susmote/p/8967517.html
Copyright © 2011-2022 走看看