整理这番外篇的缘由是但愿可以让爬虫的朋友更加理解这块内容,由于爬虫爬取数据可能很简单,可是如何高效持久的爬,利用进程,线程,以及异步IO,其实不少人和我同样,故整理此系列番外篇linux
程序并不能单独和运行只有将程序装载到内存中,系统为他分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别在于:程序是指令的集合,它是进程的静态描述文本;进程是程序的一次执行活动,属于动态概念。shell
例如咱们写一个hello程序,当这个程序再操做系统上运行的时候,操做系统会给咱们一种假象,好像系统上就这一个程序在运行。程序看上去是独占的使用处理器,主存,和IO设备,处理器看上去就像在不间断的执行程序中的指令,即该程序的代码和数据是操做系统内存中惟一的对象。这其实就是经过进程实现的。编程
进程的概念服务器
进程是操做系统对一个正在运行的程序的一种抽象。即进程是处理器,主存,IO设备的抽象
操做系统能够同时运行多个进程,而每一个进程都好像在独占的使用硬件网络
并发运行多线程
并发运行:一个进程的指令和另一个进程的指令是交错执行的。并发
上下文切换
CPU看上去像是在并发的执行多个进程,这是经过处理器在进程之间切换来实现的,操做系统实现这种交错执行的机制称为上下文切换异步
操做系统保持跟踪进程运行所需的全部状态信息。这种状态,就是上下文。
在任何一个时刻,操做系统都只能执行一个进程代码,当操做系统决定把控制权从当前进程转移到某个新进程时,就会进行上下文切换,即保存当前进程的上下文,恢复新进程的上下文,而后将控制权传递到新进程,新进程就会从它上次中止的地方开始。操作系统
咱们还经过hello这个程序进行理解这个过程(环境为linux):命令行
shell进程和hello进程。
线程的概念
线程是操做系统可以进行运算调度的最小单位,它被包含在进程中,是进程中的实际运做单位
一个进程实际上能够由多个线程的执行单元组成。每一个线程都运行在进程的上下文中,并共享一样的代码和全局数据。
因为在实际的网络服务器中对并行的需求,线程成为愈来愈重要的编程模型,由于多线程之间比多进程之间更容易共享数据,同时线程通常比进程更高效
并发指的是同时具备多个活动的系统
并行值得是用并发来使一个系统运行的更快。并行能够在操做系统的多个抽象层次进行运用