• 等级
  • 8960 访问
  • 105 原创
  • 1 转发
  • 52835 排名
  • 5 评论
  • 2 获赞

4种常见IO模式详解

IO模式 本文讨论的背景是Linux环境下的网络IO。 对于一次IO访问,数据会先被拷贝到操作系统内核的缓冲区中,然后再从操作系统内核的缓冲区拷贝到应用程序的地址空间。 所以,当发生一个IO操作时,它会经历两个阶段:1. 等待数据准备2. 将数据从内核拷贝到进程中 对于两个阶段,linux系统产生了下面五种网络模式的IO存储方案。 阻塞 I/O(blocking IO) 非阻塞 I/O...

2018-10-07 14:53:52

python之协程

协程 了解协程之前,需要先了解多线程和多进程以及函数的工作模式:进程与线程 对操作系统来说,线程是最小的执行单元,进程是最小的资源管理单元。 函数(子程序),在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕。 def A():     print('a')    B()     print('aa')     return ...

2018-09-29 15:08:19

线程与进程的总体区别

进程和线程的总体区别 进程 什么是进程? 程序的一个执行实例 正在执行的程序 内核观点:担当分配系统资源(cpu时间或内存)的实体。 进程就是一个程序在一个数据集上的一次动态执行过程。 进程由以下三部分组成: 1、程序:我们编写的程序用来描述进程要完成哪些功能以及如何完成。 2、数据集:数据集则是程序在执行过程中需要的资源,比如图片、音视频、文件等。 3、进程控制块:进程控制块是...

2018-09-28 10:16:07

python之进程池

进程池: pool 就是一堆事先创建好的进程。 进程池内部维护一个进程序列,当有程序要使用进程(运行)时,则去进程池中获取一个进程,如果进程池序列中没有可供使用的进进程,那么程序就会等待,直到进程池中有可用进程为止。 进程池里有两个方法:apply串行和apply_async并行 from multiprocessing import Process, Pool import time...

2018-09-26 17:52:33

python之进程锁

进程锁:multiprocessing下的Lock方法 这个的主要作用是让进程不乱掉,下面代码就是可以避免 i 乱打印 from multiprocessing import Process, Lock def f(l, i): l.acquire() #锁住进程 try: print('hello world', i) finally: ...

2018-09-26 17:33:47

python之进程间的通信(queue,pipe,Manager)

不同进程间内存是不共享的,要想实现两个进程间的数据交换,可以用多进程里的Queue来解决: Queues 使用方法跟threading里的queue差不多,注意在执行的时候,queue是一个备份,而不是原来的queue,不过实现了数据共享。 from multiprocessing import Process, Queue #注意这里要import Queue,之后的使用相当于备份一个q...

2018-09-26 17:09:15

python之多进程模块multiprocessing

进程: python里进程是multiprocessing模块 用法和多线程没有什么区别(os.getpid()是获得进程号,ppid是父进程号) import time ,os import multiprocessing def f(name): time.sleep(2) print('hello', name) print(os.getpid()) ...

2018-09-26 14:41:01

python之Event事件标志

Event: Event就是一个在线程里的标志,随时可以切换 event = threading.Event()   设置标志位:event.set() 清除标志:event.clear() 判断是否设置标志位:event.is_set() 等待被设定:event.wait()   模拟红绿灯来使用一下event: 标志位设定了,代表绿灯,直接通行。 标志位被清空,代表红灯,...

2018-09-26 13:01:47

python之队列queue

队列queue 解耦,直接实现松耦合,放一个拿一个 提高处理效率 queue.Queue(maxsize=0) #先入先出 queue.LifoQueue(maxsize=0) #后进先出(栈) queue.PriorityQueue(maxsize=0) #存储数据时可设置优先级的队列 import queue q = queue.Queue() for i in range(10...

2018-09-26 11:59:38

python之守护线程

守护线程与非守护线程: 守护线程会随着非守护线程结束而结束(比如主线程和其他副线程)。 守护线程:只要主线程执行完毕,不等其他线程,就退出程序 就是等待非守护线程执行完毕就退出 设置守护线程: t.setDaemon(True) 一定要在start之前 ...

2018-09-26 11:33:57

python之线程锁与信号量

线程锁(互斥锁Mutex) 一个进程下可以启动多个线程,多个线程共享父进程的内存空间,也就意味着每个线程可以访问同一份数据,此时,如果2个线程同时要修改同一份数据,会出现什么状况?就会可能存在同时取出了一个数据进行操作,然后存回去,这样就会丢失一次操作。所以用锁,在修改之前锁上数据,修改之后再释放锁,期间别人不能使用这个数据。 例子: import threading num = 0 ...

2018-09-26 10:17:27

linux里实现sl跑火车

下载yum源(Centos 7 为例) [root@localhost ~]# wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/epel-release-7-9.noarch.rpm 安装yum源 [root@localhost ~]# yum install -y epel-release-7-9.noarch.rpm...

2018-09-20 21:29:45

在linux的vim里用c语言模拟一个进度条

模拟一个进度条小程序   进度条代码:   #include <stdio.h> #include <string.h> #include <unistd.h> int main() {         int i = 0;         char bar[102];         memset(bar, 0, sizeof(bar))...

2018-09-15 14:35:26

c语言\n和\r的区别

c语言里: 反斜杠 \r 代表回车 反斜杠 \n代表换行   回车 不等于 换行,回车是到当前行的首位置,换行是到下一行的首位置。 可以用\r刷新当前行的内容,可以用\n开始输入下一喊的内容...

2018-09-15 12:08:52

linux之make与makefile

make是一个命令,Makefile是一个文件(可大写也可以小写) Makefile里面放的是依赖关系和依赖方法     新建一个makefile文件,在Makefile里写: hello:hello.c gcc hello -o hello.c       //必须以table开头 保存退出   生成可执行: 直接make,然后./hello就可以执行 make...

2018-09-15 12:01:43

linux之c/c++编译器gcc/g++的用法以及介绍

gcc/g++是linux下常用的c/c++编译器,目的就是把test.c文件转换成可运行的文件。   用法: gcc  [可选项]  要编译的文件  [可选项]  [目标文件] 比如:(-E和-o就是可选项) gcc -E test.c -o test.i ---------------------------------------------------------------...

2018-09-15 00:30:14

linux下vim的基本操作总结

Vim模式: 主要掌握三种: 正常模式(命令模式):控制屏幕光标的移动,字符、字或者行的删除,移动复制某区段以及进入插入模式下,或者到最下行模式里 插入模式:只有在插入模式中,才可以输入文字,按EXC键回到命令模式。 最下行模式(末行模式):文件保存或退出、也可以进行文件替换、找字符串、列出行号等等。在命令模式下,按‘:’进入该模式。要查看所有模式:打开vim,最下行模...

2018-09-14 13:30:10

python之最简单的多线程两种写法(类和方法)(threading模块)

多线程指的是:多个线程可以共享一个cpu,cpu在每个线程上运行一会儿,让我们感觉到是多任务在运行,但其实同一时间同一核心只能运算一个东西。 python里多线程在模块threading里 他的用法如下: import threading import time #用方法来写 def run(n): print("run",n) time.sleep(2) t1 = ...

2018-09-12 14:03:35

二叉搜索树详解——附加C语言代码实现

二叉搜索树: 对于树中的每个节点X,它的左子树中所有项的值都小于X,右子树所有值都大于X,并且没有重复。 一、构造树: 树可以由一个个的节点构成,所以先定义节点结构体,和数据类型变量重命名 typedef int BSTDataType; typedef struct BSTreeNode { struct BSTreeNode* _left; struct BSTreeNode*...

2018-08-31 15:24:58

搜索二叉树的删除

搜索二叉树删除比较麻烦,具体看代码里的解释:(删除带有两个子节点的节点需要用到中序后继节点)         //先寻找中序后继节点,再进行删除         //寻找中序后继节点         public Node getHouJiNode(Node delNode) { //定义中序后继节点 Node houji = delNode; //定义中序后继的父节点 Nod...

2018-08-29 19:56:31

昆昆欧粑粑

关注
  • 计算机软件/学生
  • 中国 陕西省 西安市
奖章
  • 持之以恒