12 2018 档案

摘要:1、简述计算机操作系统中的“中断”的作用? 2、简述计算机内存中的“内核态”和“用户态”; 3、进程间通信方式有哪些? 4、简述你对管道、队列的理解; 5、请列举你知道的进程间通信方式; 6、什么是同步I/O,什么是异步I/O? 7、请问multiprocessing模块中的Value、Array类 阅读全文
posted @ 2018-12-26 23:47 混世妖精 阅读(211) 评论(0) 推荐(0)
摘要:一 了解select,poll,epoll IO复用:为了解释这个名词,首先来理解下复用这个概念,复用也就是共用的意思. 复用在通信领域的使用,在通信领域中为了充分利用网络连接的物理介质, 往往在同一条网络链路上采用时分复用或频分复用的技术使其在同一链路上传输多路信号。 复用的含义: 即公用某个“介 阅读全文
posted @ 2018-12-22 23:29 混世妖精 阅读(349) 评论(0) 推荐(0)
摘要:IO模型比较分析 到目前为止,已经将四个IO Model都介绍完了。现在回过头来回答最初的那几个问题:blocking和non-blocking的区别在哪,synchronous IO和asynchronous IO的区别在哪。先回答最简单的这个:blocking vs non-blocking。前 阅读全文
posted @ 2018-12-22 23:28 混世妖精 阅读(130) 评论(0) 推荐(0)
摘要:异步IO(Asynchronous I/O) Linux下的asynchronous IO其实用得不多,从内核2.6版本才开始引入。先看一下它的流程: 用户进程发起read操作之后,立刻就可以开始去做其它的事。而另一方面,从kernel的角度,当它受到一个asynchronous read之后,首先 阅读全文
posted @ 2018-12-22 23:27 混世妖精 阅读(159) 评论(0) 推荐(0)
摘要:多路复用IO(IO multiplexing) IO multiplexing这个词可能有点陌生,但是如果我说select/epoll,大概就都能明白了。有些地方也称这种IO方式为事件驱动IO(event driven IO)。我们都知道,select/epoll的好处就在于单个process就可以 阅读全文
posted @ 2018-12-22 23:24 混世妖精 阅读(261) 评论(0) 推荐(0)
摘要:非阻塞IO(non-blocking IO) Linux下,可以通过设置socket使其变为non-blocking。当对一个non-blocking socket执行读操作时,流程是这个样子: 从图中可以看出,当用户进程发出read操作时,如果kernel中的数据还没有准备好,那么它并不会bloc 阅读全文
posted @ 2018-12-22 22:34 混世妖精 阅读(261) 评论(0) 推荐(0)
摘要:在linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程大概是这样: 当用户进程调用了recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据。对于network IO来说,很多时候数据在一开始还没有到达(比如,还没有收到一个完整的UDP包),这个时 阅读全文
posted @ 2018-12-22 21:21 混世妖精 阅读(1257) 评论(0) 推荐(0)
摘要:IO模型介绍 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-bloc 阅读全文
posted @ 2018-12-20 22:56 混世妖精 阅读(109) 评论(0) 推荐(0)
摘要:一 gevent模块 适用于单线程下多个任务的I/O行为,实现遇到I/O就自动切到另外一个任务。 Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程。 Greenlet全部 阅读全文
posted @ 2018-12-19 21:09 混世妖精 阅读(345) 评论(0) 推荐(0)
摘要:一 greenlet模块 如果我们在单个线程内有20个任务,要想实现在多个任务之间切换,使用yield生成器的方式过于麻烦(需要先得到初始化一次的生成器,然后再调用send。。。非常麻烦),而使用greenlet模块可以非常简单地实现这20个任务直接的切换 单纯的切换(在没有io的情况下或者没有重复 阅读全文
posted @ 2018-12-19 20:52 混世妖精 阅读(185) 评论(0) 推荐(0)
摘要:基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,并发的本质:切换+保存状态。 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制),一种情况是该任务发生了阻塞(I/O),另外一种情况是该任务计算的时间过长或有一个优先级更高的程序替 阅读全文
posted @ 2018-12-18 23:15 混世妖精 阅读(100) 评论(0) 推荐(0)
摘要:提交任务的两种方式:同步调用与异步调用 同步调用 使程序编程串行 异步调用 阻塞:是进程运行的一种状态,进程运行是碰到I/O就进行阻塞状态,会被剥夺走cpu的执行权限。 同步不同于阻塞,同步:是提交任务的一种方式,如果提交的任务是一个纯计算的同步,没有I/O,提交后要等,没有阻塞。 阅读全文
posted @ 2018-12-17 23:12 混世妖精 阅读(1027) 评论(0) 推荐(0)
摘要:一 进程池与线程池 在刚开始学多进程或多线程时,我们迫不及待地基于多进程或多线程实现并发的套接字通信。 server import socket from threading import Thread def communicate(conn): while True: try: data = c 阅读全文
posted @ 2018-12-17 23:09 混世妖精 阅读(190) 评论(0) 推荐(0)
摘要:一 线程queue queue is especially useful in threaded programming when information must be exchanged safely between multiple threads. 有三种不同的用法 class queue. 阅读全文
posted @ 2018-12-17 20:10 混世妖精 阅读(127) 评论(0) 推荐(0)
摘要:一 信号量 信号量也是一把锁,可以指定信号量为5,对比互斥锁同一时间只能有一个任务抢到锁去执行,信号量同一时间可以有5个任务拿到锁去执行,如果说互斥锁是合租房屋的人去抢一个厕所,那么信号量就相当于一群路人争抢公共厕所,公共厕所有多个坑位,这意味着同一时间可以有多个人上公共厕所,但公共厕所容纳的人数是 阅读全文
posted @ 2018-12-17 19:51 混世妖精 阅读(321) 评论(0) 推荐(0)
摘要:一 死锁现象 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程,如下就是死锁 执行效果 二 递归锁 解决方法,递归锁,在Python中为了支持 阅读全文
posted @ 2018-12-17 15:29 混世妖精 阅读(208) 评论(0) 推荐(0)
摘要:定义: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lo 阅读全文
posted @ 2018-12-17 14:31 混世妖精 阅读(133) 评论(0) 推荐(0)
摘要:守护线程 无论是进程还是线程,都遵循:守护xxx会等待主xxx运行完毕后被销毁 需要强调的是:运行完毕并非终止运行 详细解释: 在一个进程内,如果不开其它线程,默认就只有一个主线程,主线程代码运行完,改进程结束 在一个进程内,开多线程,主线程在运行完毕后,等待其它线程运行完毕后,结束。主线程结束代表 阅读全文
posted @ 2018-12-17 10:57 混世妖精 阅读(140) 评论(0) 推荐(0)
摘要:Thread对象的其他属性或方法 介绍 getName()和setName() 执行结果 线程1 is running主线程 主线程名称儿子线程1 is done isAlive() 执行结果 线程1 is runningTrue线程1 is done 主线程等待子线程结束 执行结果 线程1 is 阅读全文
posted @ 2018-12-17 01:45 混世妖精 阅读(325) 评论(0) 推荐(0)
摘要:一 开启线程速度快于进程 开进程的开销远大于开线程 进程 执行结果 主进程进程1 is working 进程1 end 线程 执行结果 线程1 is working 主线程线程1 end 二 同一进程内的线程共享该进程的数据 1、进程之间地址空间是隔离的 执行结果如下,毫无疑问子进程p已经将自己的全 阅读全文
posted @ 2018-12-17 01:21 混世妖精 阅读(168) 评论(0) 推荐(0)
摘要:一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍 二 开启线程的两种方式 方式一 方式二 三 练习题 1、基于多线程实现并发的套接字通信 2、编写一个简单的文本处理工具,具备三个任务,一个接收用户输 阅读全文
posted @ 2018-12-17 00:50 混世妖精 阅读(386) 评论(0) 推荐(0)
摘要:一 什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程(流水线的工作需要电源,电源就相当于cpu),而一条流水线必须属于一个车间,一个车间的工作过程是一个进程,车间负责把资源整合到一起,是一个资源单位,而一个车间内至少有一条流水线。 阅读全文
posted @ 2018-12-17 00:37 混世妖精 阅读(148) 评论(0) 推荐(0)
摘要:生产者消费者模型介绍 生产者指的是生产数据的任务,消费者指的是处理数据的任务。 在并发编程中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这个问题,引入了生产者和消费 阅读全文
posted @ 2018-12-17 00:21 混世妖精 阅读(362) 评论(0) 推荐(0)
摘要:加锁可以保证多个进程修改同一块数据时,同一时间只能有一个任务可以进行修改,即串行地修改,没错,速度是慢了,但牺牲了速度却保证了数据安全。 虽然可以用文件共享数据实现进程间通信,但问题是: 1、效率低(共享数据基于文件,而文件是硬盘上的数据) 2、需要自己加锁处理 我们最好找寻一种解决方案能够兼顾: 阅读全文
posted @ 2018-12-16 22:48 混世妖精 阅读(143) 评论(0) 推荐(0)
摘要:互斥锁 (Lock) 并发变成串行,效率降低了,保证数据不会错乱。 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,而共享带来的是竞争,竞争带来的结果就是错乱,如下 如何控制,就是加锁处理。而互斥锁的意思就是互相排斥。如果把多个进程比喻为多个人,互斥锁 阅读全文
posted @ 2018-12-16 22:28 混世妖精 阅读(337) 评论(0) 推荐(0)
摘要:守护进程 主进程创建子进程,然后将该进程设置成守护自己的进程,守护进程伴随着子进程的结束而结束。 如果我们有两个任务需要并发执行,那么开一个主进程和一个子进程分别去执行就ok了,如果子进程的任务在主进程任务结束后就没有存在的必要了,那么该子进程应该在开启前就被设置成守护进程。主进程代码运行结束,守护 阅读全文
posted @ 2018-12-16 20:39 混世妖精 阅读(202) 评论(0) 推荐(0)
摘要:一 Process对象的join方法 在主进程运行过程中如果想并发地执行其他的任务,我们可以开启子进程,此时主进程的任务与子进程的任务分两种情况 情况一:在主进程的任务与子进程的任务彼此独立的情况下,主进程的任务先执行完毕后,主进程还需要等待子进程执行完毕,然后统一回收资源。 情况二:如果主进程的任 阅读全文
posted @ 2018-12-15 22:57 混世妖精 阅读(273) 评论(0) 推荐(0)
摘要:父进程的运行过程中开了子进程,这两个进程共用一个打印终端。父进程打印完 主 14140 124 后并没有结束掉。等着子进程运行完后,主进程才会结束。 父进程任何时候查看子进程都能找到(僵尸进程)。子进程结束掉后,留一个状态信息。父进程结束后会清理掉所有信息。 僵尸进程缺点:多个pid被占。如果父进程 阅读全文
posted @ 2018-12-15 22:23 混世妖精 阅读(170) 评论(0) 推荐(0)
摘要:import os 主 14140 1249948 is running, parent id is <14140>9948 is done, parent id is <14140> 124是pycharm的进程号 阅读全文
posted @ 2018-12-15 22:13 混世妖精 阅读(1622) 评论(0) 推荐(0)
摘要:一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu\_count\(\)查看),在python中大部分情况需要使用多进程。 Python提供了multiprocessing。 multiprocessing模块用来开启 阅读全文
posted @ 2018-12-15 22:11 混世妖精 阅读(1493) 评论(0) 推荐(0)
摘要:进程 进程:正在进行的一个过程或者说一个任务。而负责执行任务则是cpu。 进程与程序的区别 程序仅仅只是一堆代码而已,而进程指的是程序的运行过程。 举例: 想象一位有一手好厨艺的计算机科学家正在为他的女儿烘制生日蛋糕。 他有做生日蛋糕的食谱, 厨房里有所需的原料:面粉、鸡蛋,黄油等。 在这个比喻中: 阅读全文
posted @ 2018-12-15 21:26 混世妖精 阅读(161) 评论(0) 推荐(0)
摘要:进程 顾名思义,进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。是一个抽象的感念 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一。操作系统的其他所有内容都是围绕进程的概念展开的。 操作系统介绍 一、为什么要有操作系统 现代的计算机系统主要 阅读全文
posted @ 2018-12-15 20:51 混世妖精 阅读(303) 评论(0) 推荐(0)
摘要:1、面向对象三大特性,各有什么用处,说说你的理解。 2、类的属性和对象的属性有什么区别? 3、面向过程编程与面向对象编程的区别与应用场景? 4、类和对象在内存中是如何保存的。 5、什么是绑定到对象的方法、绑定到类的方法、解除绑定的函数、如何定义,如何调用,给谁用?有什么特性? 7、python中经典 阅读全文
posted @ 2018-12-13 22:05 混世妖精 阅读(480) 评论(0) 推荐(0)
摘要:需求:开发一个支持多用户同时在线的FTP程序 要求:1、用户加密认证2、允许同时多用户登录(用到并发编程的知识,选做)3、每个用户有自己的家目录,且只能访问自己的家目录4、对用户进行磁盘配额,每个用户的可用空间不同(选做)5、允许用户在ftp server上随意切换目录6、允许用户查看当前目录下的文 阅读全文
posted @ 2018-12-11 21:15 混世妖精 阅读(401) 评论(0) 推荐(0)
摘要:需求:选课系统开发,要求有四种角色:学校、学员、课程、讲师详细要求:1、创建北京、上海 2 所学校2、创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3、课程包含,周期,价格,通过学校创建课程4、通过学校创建班级, 班级关联课程、讲师5、创建学员 阅读全文
posted @ 2018-12-11 21:03 混世妖精 阅读(654) 评论(0) 推荐(0)
摘要:1、什么是C/S架构? 2、互联网协议是什么?分别介绍五层协议中每一层的功能? 3、基于tcp协议通信,为何建立链接需要三次握手,而断开链接却需要四次挥手 4、为何基于tcp协议的通信比基于udp协议的通信更可靠? 5、‍流式协议指的是什么协议,数据报协议指的是什么协议? 6、什么是socket?简 阅读全文
posted @ 2018-12-08 23:54 混世妖精 阅读(273) 评论(0) 推荐(0)
摘要:tcp:发送数据可靠,需要建立连接,存在粘包现象udp:传送数据不可靠,不用建立连接,发数据效率高,不存在粘包现象 服务端 客户端 TCP VS UDP tcp基于链接通信 基于链接,则需要listen(backlog),指定连接池的大小 基于链接,必须先运行的服务端,然后客户端发起链接请求 对于m 阅读全文
posted @ 2018-12-01 22:11 混世妖精 阅读(206) 评论(0) 推荐(0)
摘要:简单版 服务端 客户端 函数版 服务端 客户端 类版本 服务端 客户端 阅读全文
posted @ 2018-12-01 22:08 混世妖精 阅读(238) 评论(0) 推荐(0)
摘要:多个包 多个命令的结果 粘到一起了 因为recv(1024)1024限制了导致的结果 所谓粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。 参考:http://www.cnblogs.com/linhaifeng/articles/6129246.html粘包 阅读全文
posted @ 2018-12-01 22:02 混世妖精 阅读(451) 评论(0) 推荐(0)
摘要:客户端 服务端 加循环(通信循环) 客户端 服务端 修复bug send 可以发 空 # 发给了os的内存 在调用网卡 发送数据recv 不可以 收空 # 到了os的内存 在传给了应用程序内存 所以 客户端 就卡住了 if not msg:continue 卡住原因 os 不会发''(空)数据 2、 阅读全文
posted @ 2018-12-01 21:01 混世妖精 阅读(216) 评论(0) 推荐(0)