read

ZooKeeper实现读写锁

霸气de小男生 提交于 2019-11-28 07:35:43
在上一篇文章,我们已经实现了分布式锁。今天更进一步,在分布式锁的基础之上,实现读写锁。 完整代码在 https://github.com/SeemSilly/codestory/tree/master/research-zoo-keeper 1 读写锁的概念 参考维基百科的条目: https://zh.wikipedia.org/wiki/读写锁 读写锁是计算机程序的并发控制的一种同步机制,用于解决读写问题,读操作可并发重入,写操作是互斥的。 读写锁有多种读写权限的优先级策略,可以设计为读优先、写优先或不指定优先级。 读优先:允许最大并发的读操作,但可能会饿死写操作;因为写操作必须在没有任何读操作的时候才能够执行。 写优先:只要排队队列中有写操作,读操作就必须等待; 不指定优先级:对读操作和写操作不做任何优先级的假设 不指定优先级的策略,最适合使用ZooKeeper的子节点模式来实现,今天就来尝试这种策略。 2 锁设计 同前面介绍的普通分布式锁,也使用子节点模式实现。先用容器模式(CreateMode.CONTAINER)创建唯一的锁节点,每个锁客户端在锁节点下使用临时循序模式(CreateMode. SEQUENTIAL)创建子节点。这些子节点会自动在名称后面追加10位数字。 2.1 如何标识读锁还是写锁? 有两种简单的方案:在子节点名中标识、在节点的值中标识。如果采用在值中标识

[PHP] 自定义保存Session数据

廉价感情. 提交于 2019-11-28 07:09:04
简介: 在PHP开发偶尔会遇到需要保存Session数据到数据库的要求,大多也是为了实现Session共享,自己简单的实践了PHP的自定义保存Session功能,用起来还是非常方便。 原型: 1.session_set_save_handler ( callable $open , callable $close , callable $read , callable $write , callable $destroy , callable $gc [, callable $create_sid [, callable $validate_sid [, callable $update_timestamp ]]] ) : bool 2.session_set_save_handler ( object $sessionhandler [, bool $register_shutdown = TRUE ] ) : bool 实践: 1.调用session_start()之后,就会执行open → read → write → close 2.write是PHP脚本执行完毕之后调用的,就是保存当前Session的数据 3.read就是相当于恢复Session数据,一次性读入到$_SESSION变量中 实例: class FileSessionHandler { private

Python-报错UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence

痴心易碎 提交于 2019-11-28 05:37:38
代码如下: #-*-coding:utf-8-*- from sys import argv script, from_file, to_file =argv print(open(from_file).read()) input('>') open(to_file,'w').write(open(from_file, encoding='utf-8', errors='ignore').read()) #open文件后要记得close保存,如果open后,调用read了,可以不用额外调用close,read已经保存文件 print(open(to_file).read()) 报错如下: UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence 原因及解决办法: 1.首先,打开的文件不是gbk编码,所以解码报错 2.尝试了以下办法解决: #-*-coding:utf-8-*- from sys import argv script, from_file, to_file =argv print(open(from_file, encoding='utf-8', errors='ignore').read()) input('>') open(to

几行Python代码快速解析、整理上万份数据文件

泄露秘密 提交于 2019-11-28 04:20:28
在这个世界上,人们每天都在用 Python 完成着不同的工作。而文件操作,则是大家最常需要解决的任务之一。使用 Python,你可以轻松为他人生成精美的报表,也可以用短短几行代码快速解析、整理上万份数据文件。 当我们编写与文件相关的代码时,通常会关注这些事情: 我的代码是不是足够快?我的代码有没有事半功倍的完成任务? 在这篇文章中,我会与你分享与之相关的几个编程建议。我会向你推荐一个被低估的 Python 标准库模块、演示一个读取大文件的最佳方式、最后再分享我对函数设计的一点思考。 下面,让我们进入第一个“模块安利”时间吧。 **注意:**因为不同操作系统的文件系统大不相同,本文的主要编写环境为 Mac OS/Linux 系统,其中一些代码可能并不适用于 Windows 系统。 建议一:使用 pathlib 模块 如果你需要在 Python 里进行文件处理,那么标准库中的 os 和 os.path 兄弟俩一定是你无法避开的两个模块。在这两个模块里,有着非常多与文件路径处理、文件读写、文件状态查看相关的工具函数。 让我用一个例子来展示一下它们的使用场景。有一个目录里装了很多数据文件,但是它们的后缀名并不统一,既有 .txt ,又有 .csv 。我们需要把其中以 .txt 结尾的文件都修改为 .csv 后缀名。 我们可以写出这样一个函数: 在学习过程中有什么不懂得可以加我的

python基础一 day20 模块的导入

限于喜欢 提交于 2019-11-28 01:22:44
# 内置模块 # 扩展的 django # 自定义的 # 文件 # import demo # def read(): # print('my read func') # demo.read() # print(demo.money) # 先从sys.modules里查看是否已经被导入 # 如果没有被导入,就依据sys.path路径取寻找模块 # 找到了就导入 # 创建这个模块的命名空间 # 执行文件,把文件中的名字都放到命名空间里 # import sys # print(sys.modules.keys()) # print(sys.path) # import time as t # print(t.time()) # oracle # mysql # if 数据库 == ‘oracle’: # import oracle as db # elif 数据库 == ‘mysql’: # import mysql as db # # 连接数据库 db.connect # # 登录认证 # # 增删改查 # # 关闭数据库 # import time,sys,os # from time import sleep # from demo import read # def read(): # print('my read') # read() # import demo #

【MySQL】数据库事务深入分析

一世执手 提交于 2019-11-28 00:32:17
一、前言 只有InnoDB引擎支持事务,下边的内容均以InnoDB引擎为默认条件 二、常见的并发问题 1、脏读 一个事务读取了另一个事务未提交的数据 2、不可重复读 一个事务对同一数据的读取结果前后不一致。两次读取中间被其他事务修改了 3、幻读 幻读是指事务读取某个范围的数据时,因为其他事务的操作导致前后两次读取的结果不一致。幻读和不可重复读的区别在于,不可重复读是针对确定的某一行数据而言,而幻读是针对不确定的多行数据。因而幻读通常出现在带有查询条件的范围查询中 三、事务隔离级别 1、读未提交(READ UNCOMMITTED) 可能产生脏读、不可重复读、幻读 2、读已提交(READ COMMITTED) 避免了脏读,可能产生不可重复读、幻读 3、可重复读(REPEATABLE READ)(mysql默认隔离级别) 避免了脏读,不可重复读。通过区间锁技术避免了幻读 4、串行化(SERIALIZABLE) 串行化可以避免所有可能出现的并发异常,但是会极大的降低系统的并发处理能力 四、数据库日志有哪些? 1、undo日志 undo日志用于存放数据修改被修改前的值 UNDO LOG中分为两种类型,一种是 INSERT_UNDO(INSERT操作),记录插入的唯一键值; 一种是 UPDATE_UNDO(包含UPDATE及DELETE操作),记录修改的唯一键值以及old column记录。

python文件操作

筅森魡賤 提交于 2019-11-27 21:12:08
单词 with open mode encoding read readline write close tell seek rename 文件操作是什么? # 文件操作是什么? # 操作文件: # f = open("文件路径",mode="模式",encoding="编码") # open() # 调用操作系统打开文件 # mode # 对文件的操作方式 # encoding # 文件的编码 -- 存储编码要统一 # win -- gbk # linux -- utf-8 # mac -- utf-8 最常用的就是utf-8 # f 文件句柄 -- 操作文件的相当于锅把 # 文件操作怎么用? # 读 r # 写 w清空写 ,a追加写 # 读 rb # 写 wb ab 文件的读r # f.read() # 全部读取 # f.read(3) # 字符读取 # readline(3) # 读取一行内容中多个字符 # f.readlines()) # 一行一行读取,存储到列表中 \n是换行 with open('cs.txt',encoding='utf-8',mode='r') as f1: # print(f1.read())#全部读取 注意 一般不这么读 耗内存 print(f1.read(1))# 字符读取 注意不是读取字节 符号也是一个字符 # print(f1

TTCP程序源码剖析

回眸只為那壹抹淺笑 提交于 2019-11-27 18:37:22
1、ttcp作用:检测TCP吞吐量 测试的数据是每秒传输的字节数 带宽 Mb/s 测试程序的性能指标: 传输带宽,QPS/TPS, 以及 CPU利用率,延迟等等。 2、ttcp应用层协议: 3. 尝试自己用C语言写出简单的TTCP程序 先发送一个SessionMessage包中number表示消息的条数,length表示每条消息的长度 PayloadMessage包中存放数据的长度和数据 服务端接收函数 void receive(const Options& opt) { int sockfd = acceptOrDie(opt.port); struct SessionMessage sessionMessage = { 0, 0 }; if (read_n(sockfd, &sessionMessage, sizeof(sessionMessage)) != sizeof(sessionMessage)) { perror("read SessionMessage"); exit(1); } sessionMessage.number = ntohl(sessionMessage.number); sessionMessage.length = ntohl(sessionMessage.length); printf("receive number = %d\nreceive

保护出题人「SDOI 2013」

丶灬走出姿态 提交于 2019-11-27 18:10:58
题意 有n个关卡,每一关都会在僵尸队列的排头添加一只僵尸,同时排头与家的距离会发生变化。相邻僵尸之间的距离固定为 \(d\) 。 对于每一关,可以放置一颗任意攻击力的植物(每颗植物仅作用于当前关卡)。求攻击力总和最小值。 思路 显然 \(f[i]=max(\frac{sum[i]-sum[j-1]}{x[i]+d*(i-j)})\) ,由于斜率没有单调性,所以二分凸包。 另注:题目的取整指的是四舍五入而不是向下取整,恶臭。 代码 #include <bits/stdc++.h> using namespace std; namespace StandardIO { template<typename T>inline void read (T &x) { x=0;T f=1;char c=getchar(); for (; c<'0'||c>'9'; c=getchar()) if (c=='-') f=-1; for (; c>='0'&&c<='9'; c=getchar()) x=x*10+c-'0'; x*=f; } template<typename T>inline void write (T x) { if (x<0) putchar('-'),x*=-1; if (x>=10) write(x/10); putchar(x%10+'0'); } } using