内容:html
1.操做系统简介node
2.进程python
3.线程linux
4.协程nginx
5.IO多路复用程序员
操做系统:http://www.cnblogs.com/Eva-J/articles/8253521.html算法
进程:https://www.cnblogs.com/Eva-J/articles/8253549.html编程
线程:https://www.cnblogs.com/Eva-J/articles/8306047.html小程序
协程:https://www.cnblogs.com/Eva-J/articles/8324673.html
IO:https://www.cnblogs.com/Eva-J/articles/8324837.html
1、操做系统简介
1.什么是操做系统
操做系统位于计算机硬件与应用软件之间,本质也是一个软件。操做系统由操做系统的内核(运行于内核态,管理硬件资源)以及系统调用(运行于用户态,为应用程序员写的应用程序提供系统调用接口)两部分组成
因此,单纯的说操做系统是运行于内核态的,是不许确的。
2.操做系统做用
3.操做系统发展
4.补充
多道技术:
2、进程
1.什么是进程
顾名思义,进程即正在执行的一个过程。进程是对正在运行程序的一个抽象
进程的概念起源于操做系统,是操做系统最核心的概念,也是操做系统提供的最古老也是最重要的抽象概念之一。操做系统的其余全部内容都是围绕进程的概念展开的。
广义定义:进程是一个具备必定独立功能的程序关于某个数据集合的一次运行活动。它是操做系统动态执行的基本单元,在传统的操做系统中,进程既是基本的分配单元,也是基本的执行单元
程序和进程的区别:
2.进程调度
想多个进程交替运行,操做系统必须对这些进程进行调度,这个调度不是随机进行的,而须要遵循必定的法则,由此就有了进程的调度算法:
3.进程的并发与并行
并行 : 并行是指二者同时执行(多核同时刻运行多个进程)
并发 : 并发是指资源有限的状况下,二者交替轮流使用资源,目的是提升效率(单CPU多进程并发)
区别:
4.同步、异步、阻塞、非阻塞
(1)进程3状态
如上图进程有三个状态:就绪,运行和阻塞
进程三状态实例:
(2)同步与异步
同步:一个进程在执行某个任务时,另外一个进程必须等待其执行完毕,才能继续执行,同一时间只能作一个操做
异步:一个进程在执行某个任务时,另外一个进程无需等待其执行完毕,就能够继续执行,当有消息返回时,系统会通知后者进行处理,这样能够提升执行效率,同一时间能够作两个操做
(3)阻塞与非阻塞
阻塞与非阻塞与线程等待消息通知(无所谓同步异步)时的状态有关,主要是程序(线程)等待消息通知时的状态角度来讲的
注:不少时候同步操做会以阻塞的形式表现出来,而异步操做通常都不会在真正的IO操做处被阻塞
简单说程序到了IO处就中止运行就是阻塞(python),而程序到了IO处继续向后执行就是非阻塞(node.js)
5.进程的建立与结束
(1)进程的建立
注:不管哪种,新进程的建立都是由一个已经存在的进程执行了一个用于建立进程的系统调用而建立的
(2)进程的结束
3、线程
1.线程的引入及背景
(1)进程
程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。
程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。
在多道编程中,咱们容许多个程序同时加载到内存中,在操做系统的调度下,能够实现并发地执行。这是这样的设计,大大提升了CPU的利用率。
进程的出现让每一个用户感受到本身独享CPU,所以,进程就是为了在CPU上实现多道编程而提出的
(2)有进程为何须要线程
进程虽然有优势,可是也有缺点:
进程只能在一个时间干一件事,若是想同时干两件事或多件事,进程就无能为力了
进程在执行的过程当中若是阻塞,例如等待输入,整个进程就会挂起,即便进程中有些工做不依赖于输入的数据,也将没法执行
而线程能够很好地解决这些缺陷
引入线程的缘由:减小程序在并发执行时所付出的时空开销,使OS具备更好的并发性
(3)线程的出现
2.进程与线程的区别
3.线程的特色
4.内存中的线程
多个线程共享同一个进程的地址空间中的资源,是对一台计算机上多个进程的模拟,有时也称线程为轻量级的进程;而对一台计算机上多个进程,则共享物理内存、磁盘、打印机等其余物理资源。多线程的运行也多进程的运行相似,是cpu在多个线程之间的快速切换。
不一样的进程之间是充满敌意的,彼此是抢占、竞争cpu的关系,如迅雷会和QQ抢资源。而同一个进程是由一个程序员的程序建立,因此同一进程内的线程是合做关系,一个线程能够访问另一个线程的内存地址,你们都是共享的
相似于进程,每一个线程也有本身的堆栈,不一样于进程,线程库没法利用时钟中断强制线程让出CPU,能够调用thread_yield运行线程自动放弃cpu,让另一个线程运行
线程一般是有益的,可是带来了不小程序设计难度,线程的问题是:
所以,在多线程的代码中,须要更多的心思来设计程序的逻辑、保护程序的数据
4、协程
1.协程介绍
协程:是单线程下的并发,又称微线程,纤程
一句话说明什么是线程:协程是一种用户态的轻量级线程,即协程是由用户程序本身控制调度的。、
注意:
1 python的线程属于内核级别的,即由操做系统控制调度(如单线程遇到io或执行时间过长就会被迫交出cpu执行权限,切换其余线程运行) 2 单线程内开启协程,一旦遇到io,就会从应用程序级别(而非操做系统)控制切换,以此来提高效率(!!!非io操做的切换与效率无关)
对比操做系统控制线程的切换,用户在单线程内控制协程的切换
优势:
缺点:
协程特色:
2.greenlet模块
(1)安装
pip3 install greenlet
(2)greenlet模块使用
1 # 使用greenlet模块 2 # 真正的协程就是使用greenlet模块完成切换 3 from greenlet import greenlet 4 5 6 def eat(name): 7 print('%s eat 1' % name) 8 g2.switch('egon') 9 print('%s eat 2' % name) 10 g2.switch() 11 12 13 def play(name): 14 print('%s play 1' % name) 15 g1.switch() 16 print('%s play 2' % name) 17 18 19 g1 = greenlet(eat) 20 g2 = greenlet(play) 21 22 g1.switch('egon') # 能够在第一次switch时传入参数,之后都不须要
3.gevent模块
(1)介绍
安装:pip3 install gevent
Gevent 是一个第三方库,能够轻松经过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程。 Greenlet所有运行在主程序操做系统进程的内部,但它们被协做式地调度
(2)用法
(3)同步与异步
四、协程应用
(1)爬虫
(2)经过gevent实现单线程下的socket并发
5、IO多路复用