每日运维

一切从实践开始

磁盘及网络IO工作方式解析

PIO与DMA 有必要简单地说说慢速I/O设备和内存之间的数据传输方式。 PIO我们拿磁盘来说,很早以前,磁盘和内存之间的数据传输是需要CPU控制的,也就是说如果我们读取磁盘文件到内存中,数据要经过CPU存储转发,这种方式称为PIO。显然这种方式非常不合理,需要占用大量的CPU时间来读...

2017-11-07 17:49:04

阅读数 294

评论数 0

RandomAccessFile文件随机读写

RandomAccessFile是用来访问那些保存数据记录的文件的 model各个参数详解 * r 代表以只读方式打开指定文件 * rw 以读写方式打开指定文件  * rws 读写方式打开,并对内容或元数据都同步写入底层存储设备  * rwd 读写方式打开,对文件内容的更新同...

2017-11-06 22:19:27

阅读数 276

评论数 0

ReentrantLock理解

互斥锁:线程会从sleep(加锁)——>running(解锁),过程中有上下文的切换,cpu的抢占,信号的发送等开销。 自旋锁:线程一直是running(加锁——>解锁),死循环检测锁的标志位,机制不复杂。 java.util.concurrent.locks包提供了锁和等待条...

2017-11-06 22:17:42

阅读数 633

评论数 0

白话普及serverless架构

最近serverless概念炒的特别的火,更有甚说今年是serverless元年,说是“无服务器服务”,以后开发如何如何省工,如何如何牛逼等。我个人觉得其实serverless的出现很早就有了,而且是伴随着云一起的,更多的是换了一个高大上的名字,换种玩法,炒炒概念,给公有云打打广告。既然这个概念有...

2017-11-06 22:14:53

阅读数 401

评论数 0

Semaphore信号量类详解

Semaphore类是一个计数信号量,必须由获取它的线程释放,通常用于限制可以访问某些资源(物理或逻辑的)线程数目,信号量控制的是线程并发的数量。 计数器:一个信号量有且仅有3种操作,且它们全部是原子的:初始化、增加和减少 增加可以为一个进程解除阻塞; 减少可以让一个进程进入阻塞。 ...

2017-11-03 22:18:17

阅读数 1066

评论数 0

dd磁盘io测试

测试纯写入性能 time dd if=/dev/zero of=test bs=4k count=10000 oflag=direct 测试纯读取性能 time dd if=test of=/dev/null bs=4k count=10000 iflag=direct ①、time有计时...

2017-11-02 23:40:03

阅读数 674

评论数 0

ReentrantLock重入锁

ReentrantLock是一个可重入的互斥锁,重入锁是一种递归无阻塞的同步机制。由最近成功获取锁,还没有释放的线程所拥有,当锁被另一个线程拥有时,调用lock的线程可以成功获取锁。如果锁已经被当前线程拥有,当前线程会立即返回。 重入锁的构造方法提供一个可选的公平参数:     公平情况下...

2017-11-02 23:22:42

阅读数 67

评论数 0

单点登录

什么是单点登录?单点登录全称Single Sign On(以下简称SSO),是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分. 相比于单系统登录,sso需要一个独立的认证中心,只有认证中心能接受用户的用户名密码等安全信息,其他系统不提供登...

2017-11-02 23:19:34

阅读数 112

评论数 0

Python 线程池

一切从动手开始 pip install threadpool   pool = ThreadPool(poolsize)   requests = makeRequests(some_callable, list_of_args, callback)   [pool.putReques...

2017-07-12 17:15:17

阅读数 201

评论数 0

Python协程(coroutine)

coroutine和generator的区别 generator是数据的产生者。即它pull data 通过 iteration,generator的作用是可以作为data pipeline使用. coroutine是数据的消费者。它push data into pipeline 通过 sen...

2017-07-07 16:59:07

阅读数 258

评论数 0

Python生成器

在Python中,一边循环一边计算的机制,称为生成器(Generator)。特殊场景下可以节约内存开支。 要创建一个generator >>> g = (x * x for x in range(10)) >>> g at 0x104feab40>...

2017-07-06 18:07:45

阅读数 128

评论数 0

kafka 存储文件解析

Kafka中的Message是以topic为基本单位组织的,不同的topic之间是相互独立的。每个topic又可以分成几个不同的partition(每个topic有几个partition是在创建topic时指定的),每个partition存储一部分Message。借用官方的一张图,可以直观地看到t...

2017-07-06 10:55:29

阅读数 188

评论数 0

Java 常用线程池

Java通过Executors提供四种线程池,分别为: import java.util.concurrent.ExecutorService;   import java.util.concurrent.Executors; newCachedThreadPool创建一个可缓存线程池,...

2017-05-25 18:29:20

阅读数 139

评论数 0

Java 定时任务

Timer是一种定时器工具,用来在一个后台线程计划执行指定任务,而TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务。 Timer的schdule方法: schedule(TimerTask task, Date time):安排在指定的时间执行指定的任务。 sched...

2017-05-25 18:05:10

阅读数 457

评论数 0

java 类型转换

类型转换 Java 语言是一种强类型的语言。强类型的语言有以下几个要求: 变量或常量必须有类型:要求声明变量或常量时必须声明类型,而且只能在声明以后才能使用。 赋值时类型必须一致:值的类型必须和变量或常量的类型完全一致。 运算时类型必须一致:参与运算的数据类型必须一致才能运算。 但是...

2017-04-17 18:54:10

阅读数 176

评论数 0

java 操作csv文件

package com.mark.csv /** * 读取CSV文件 */ public void readeCsv(){ try { ArrayList csvL...

2017-04-17 15:14:22

阅读数 168

评论数 0

java NIO总结

Java NIO : Channels Buffers:缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成 NIO Buffer 对象 Selectors:允许单线程处理多个 Channel。 Channel 的实现: FileChannel 从文件中读写数...

2017-04-13 09:54:47

阅读数 209

评论数 0

java 单例模式和工厂模式

单例模式根据实例化对象时机的不同分为两种:一种是饿汉式单例,一种是懒汉式单例。 私有的构造方法 指向自己实例的私有静态引用 以自己实例为返回值的静态的公有的方法 饿汉式单例     public class Singleton {         private static Si...

2017-04-13 09:53:06

阅读数 1809

评论数 0

java 集合总结

java集合的主要分为三种类型:JAVA集合位于 java.util包 Set(集) List(列表) Map(映射) arrays函数, equals():比较两个array是否相等。 fill():将值填入array中。 sort():用来对array进行排序。 binar...

2017-04-07 18:05:32

阅读数 121

评论数 0

python multiprocessing模块

multiprocessing 充分利用cpu多核 一般情况下cpu密集使用进程池,IO密集使用线程池。python下想要充分利用多核CPU,就用多进程。 pool = multiprocessing.Pool(multiprocessing.cpu_count()) __init__(se...

2017-04-06 17:04:31

阅读数 617

评论数 0

提示
确定要删除当前文章?
取消 删除