整理这番外篇的原因是希望能够让爬虫的朋友更加理解这块内容,因为爬虫爬取数据可能很简单,但是如何高效持久的爬,利用进程,线程,以及异步IO,其实很多人和我一样,故整理此系列番外篇

一、进程

程序并不能单独和运行只有将程序装载到内存中,系统为他分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别在于:程序是指令的集合,它是进程的静态描述文本;进程是程序的一次执行活动,属于动态概念。

例如我们写一个hello程序,当这个程序再操作系统上运行的时候,操作系统会给我们一种假象,好像系统上就这一个程序在运行。程序看上去是独占的使用处理器,主存,和IO设备,处理器看上去就像在不间断的执行程序中的指令,即该程序的代码和数据是操作系统内存中唯一的对象。这其实就是通过进程实现的。

进程的概念

进程是操作系统对一个正在运行的程序的一种抽象。即进程是处理器,主存,IO设备的抽象

操作系统可以同时运行多个进程,而每个进程都好像在独占的使用硬件

并发运行

并发运行:一个进程的指令和另外一个进程的指令是交错执行的。

上下文切换

CPU看上去像是在并发的执行多个进程,这是通过处理器在进程之间切换来实现的,操作系统实现这种交错执行的机制称为上下文切换

操作系统保持跟踪进程运行所需的所有状态信息。这种状态,就是上下文。

在任何一个时刻,操作系统都只能执行一个进程代码,当操作系统决定把控制权从当前进程转移到某个新进程时,就会进行上下文切换,即保存当前进程的上下文,恢复新进程的上下文,然后将控制权传递到新进程,新进程就会从它上次停止的地方开始。

我们还通过hello这个程序进行理解这个过程(环境为linux):

shell进程和hello进程。

开始,shell进程在运行,等待命令行的输入

执行hello程序,shell通过系统调用来执行我们的请求,这个时候系统调用会讲控制权传递给操作系统。操作系统保存shell进程的上下文,创建一个hello进程以及其上下文并将控制权给新的hello进程。

hello进程终止后,操作系统恢复shell进程的上下文,并将控制权传回给shell进程

shell进程继续等待下个命令的输入

二、线程

线程的概念

线程是操作系统能够进行运算调度的最小单位,它被包含在进程中,是进程中的实际运作单位

一个进程实际上可以由多个线程的执行单元组成。每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。

由于在实际的网络服务器中对并行的需求,线程成为越来越重要的编程模型,因为多线程之间比多进程之间更容易共享数据,同时线程一般比进程更高效

三、并发和并行的概念

并发指的是同时具有多个活动的系统

并行值得是用并发来使一个系统运行的更快。并行可以在操作系统的多个抽象层次进行运用

所有的努力都值得期许,每一份梦想都应该灌溉!

python爬虫进程和线程_python爬虫番外篇(一)进程,线程的初步了解-阿里云开发者社区...相关推荐

  1. python email模块详解_python模块之email: 电子邮件编码解码 (一、解码邮件)-阿里云开发者社区...

    python自带的email模块是个很有意思的东西,它可以对邮件编码解码,用来处理邮件非常好用. 处理邮件是一个很细致的工作,尤其是解码邮件,因为它的格式变化太多了,下面先看看一个邮件的源文件: Re ...

  2. python全局变量有缩进吗_Python全局变量和局部变量的问题 400 请求报错 -问答-阿里云开发者社区-阿里云...

    # coding:utf-8 sum = 5 def add(x, y): print sum sum = x + y if __name__ == '__main__': add(7, 8) 上面的 ...

  3. python听歌识曲爬虫_Python爬取网易云音乐热门评论的搜索结果-阿里云开发者社区...

    网易云音乐评论爬虫(三):爬取歌曲的全部评论 用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条.现在我就来分享一下如何爬取网易云音乐歌曲的 ...

  4. python中shutil模块_python文件、文件夹、压缩包处理模块-shutil模块-阿里云开发者社区...

    shutil模块 高级的文件.文件夹.压缩包 处理模块 本节内容基本在linux下python交互环境实现 复制移动文件.文件夹 将文件内容拷贝到另一个文件中,可以部分内容 格式如下: ``` shu ...

  5. python列表索引超出范围 等于啥_python如何解决IndexError:列表索引超出范围?-问答-阿里云开发者社区-阿里云...

    我正在尝试为ucf101数据集生成密集流,但我不断收到以下错误: 我尝试在第68行中将video_name.split('')[1]更改为video_name.split('')[0],已编译代码,但 ...

  6. 揭秘python的5种最佳调试方法_揭秘 IPython 的 5 种最佳调试方法-阿里云开发者社区...

    云栖号:https://yqh.aliyun.com 第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策! 一个好的集成开发环境(IDE)附带的调试器是 ...

  7. python集合可以修改吗_修改包含Python3中的集合的集合列表-问答-阿里云开发者社区-阿里云...

    我试图创建一个以元组为元素的列表.每个元组都有4个整数.前两个整数是对2个range进行压缩的结果,而其他2个则是对2个不同的整数进行压缩的结果. 我正在使用此代码创建元组和最终列表,这些列表是从笛卡 ...

  8. python多线程原理_代码详解Python多线程、多进程、协程-阿里云开发者社区

    云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 一.前言 很多时候我们写了一个爬虫,实现了需求后会发现了很多值得改进的地方,其中很重要的一点就是爬 ...

  9. python后台开发性能问题_《Python高性能编程》——2.14 确保性能分析成功的策略-阿里云开发者社区...

    本节书摘来自异步社区<Python高性能编程>一书中的第2章,第2.14节,作者[美] 戈雷利克 (Micha Gorelick),胡世杰,徐旭彬 译,更多章节内容可以访问云栖社区&quo ...

最新文章

  1. 你需要启用steam社区界面功能以进行购买_绝地求生购买衣服方法
  2. 《漫画算法2》源码整理-1 二分查找树 AVL树 红黑树
  3. 常用的渗透测试工具SQLMap
  4. 汇编语言——第1次上机实验
  5. div+css经典三行两列布局
  6. linux安装mongodb并创建用户
  7. 斐讯K2 新版固件刷机教程
  8. html中鼠标冒泡泡,鼠标经过出现气泡框的简单实例
  9. 微信状态栏隐藏 HTML,完美解决微信video视频隐藏控件和内联播放问题
  10. 组建家庭计算机网络过程是怎么样的,如何组建完善的家庭无线网络操作步骤
  11. VMware16虚拟机:安装Windows10系统---超详细教程
  12. RuntimeError: DataLoader worker (pid 4499) is killed by signal: Segmentation fault.检查内存条!
  13. 完美卸载mac电脑里的软件及残留清理教程
  14. android inflate,【Android】【Inflate】inflate方法的三个参数
  15. 超级科技赋能短视频、在线阅读行业,定制安全解决方案
  16. 【应用层】DNS协议
  17. Content-Type一览 1
  18. 花十分钟顺手拿个阿里的Apsara Clouder专项技能认证,不比手里的王者香?
  19. Description 现举行新生歌手大赛,评分规则是这样的:一共有10个评委给每个歌手打分,分数采用 百分制,算分时去掉一个最高分,去掉一个最低分,取其余8个评委的平均分作为歌手的 得分。现有多个歌
  20. 在线语音识别和离线语音识别哪个好

热门文章

  1. 联想ghost重装系统_一键ghost,详细教您使用一键ghost怎么重装win7系统
  2. python列表应用案例-python列表使用实例
  3. Detected call of `lr_scheduler.step()` before `optimizer.step()`.
  4. QT示例:基于TCP点对点Socket通讯
  5. OpenCV可移植图形工具HighGUI实现图像和视频操作
  6. OpenCV中的傅里叶的门道
  7. Collapse Hierarchy(折叠继承体系)
  8. 几种限流器(RateLimiter)原理与实现
  9. Jackson第一篇【JSON字符串、实体之间的相互转换】
  10. java equals 判断空_Java 判断字符串是否为空的三种方法与性能分析