然后借鉴下《Unix网络编程卷》中的理论: IO操作中涉及的2个主要对象为程序进程、系统内核。以读操作为例,当一个IO读操作发生时,通常经历两个步骤: 1,等待数据准备 2,将数据从系统内核拷贝到操作进程中 例如,在socket上的读操作,步骤1会等到网络数据包到达,到达后会拷贝到系统内核的...
分类:
编程语言 时间:
2015-09-01 19:51:14
阅读次数:
193
IO线程池便是为异步IO服务的线程池。访问IO最简单的方式(如读取一个文件)便是阻塞的,代码会等待IO操作成功(或失败)之后才继续执行下去,一切都是顺序的。但是,阻塞式IO有很多缺点,例如让UI停止响应,造成上下文切换,CPU中的缓存也可能被清除甚至内存被交换到磁盘中去,这些都是明显影响性能的做法。...
分类:
编程语言 时间:
2015-08-31 11:47:57
阅读次数:
178
一、阻塞io操作和非阻塞io操作
对于阻塞io操作:当cpu得不到需要的文件数据的时候,则将自己挂起,直到有了数据,才能执行下面的操作。
非阻塞io: 当cpu得不到文件时候,其一直在轮询cpu,直达得到数据。
二、文件描述符
对于内核而言,所有打开的文件,都用文件描述符来引用。所有的文件操作都是由内核态完成的,当一个用户的进程创建一个文件时候,内核会给其返回一个文件描述符。
...
分类:
其他好文 时间:
2015-08-29 21:50:15
阅读次数:
219
FileReader fr=new FileReader("D:\\Demo.txt"); char[] ch=new char[2]; int len=0; while((len=fr.read(ch))!=-1) { System.out.print...
分类:
编程语言 时间:
2015-08-28 21:12:36
阅读次数:
136
单线程解决高并发的思路就是采用非阻塞,异步编程的思想。简单概括就是当遇到非常耗时的IO操作时,采用非阻塞的方式,继续执行后面的代码,并且进入事件循环,当IO操作完成时,程序会被通知IO操作已经完成。主要运用JavaScript的回调函数来实现。多线程虽然也能解决高并发,但是是以建立多个线程来实现,其...
分类:
编程语言 时间:
2015-08-28 15:24:37
阅读次数:
140
(一)移位操作符用于IO
输入输出标准库分别重载了位操作符>>和
cout
将其执行为:
( (cout
在这个语句中个,操作数”hi”和第一个
移位操作符具有中等优先级:其优先级比算术操作符低,但是比关系运算符、赋值运算符和条件操作符优先级高。若IP表达式的操作数包含了比IO操作符优先级低的操作符,相关的优先级将影响书写该表达式的方式。这种情况下,使用圆括号强制实现右集结合。...
分类:
编程语言 时间:
2015-08-27 23:06:43
阅读次数:
191
水平触发(Level Triggered,也称条件触发):select()和poll()将就绪的文件描述符告诉进程后,如果进程没有对其进行IO操作,那么下次调用select()和poll()的时候将再次报告这些文件描述符,所以它们一般不会丢失就绪的消息。 边缘触发(Edge Triggered):只...
分类:
其他好文 时间:
2015-08-11 18:13:46
阅读次数:
129
http://www.zhihu.com/question/19732473process发起IO请求同步、异步是指process与IO操作是不是同步(异步IO操作完成主动通知process)阻塞、非阻塞是指process是否会等待(非阻塞process需要不断查看IO是否完成)
分类:
其他好文 时间:
2015-08-10 21:33:59
阅读次数:
103
1.Bloom Filter
由一个很长的二进制向量和一系列hash函数组成
优点:可以减少IO操作,省空间
缺点:不支持删除,有误判
如果要支持删除操作: 改成计数布隆过滤器
2.SkipList(跳表)
核心思路: 由多层组成,每层都是一个有序链表,最底层包含所有元素,元素数逐层递减。每个节点包含两个指针,一个->,一个向下。
并行编程情况下可以用...
分类:
编程语言 时间:
2015-08-10 14:53:22
阅读次数:
225
操作流程在Java中IO操作也是有相应步骤的,以文件操作为例,主要的操作流程如下:1使用File类打开一个文件2通过字节流或字符流的子类,指定输出的位置3进行读/写操作4关闭输入/输出InputStream 和OutputStream,两个是为字节流设计的,主要用来处理字节或二进制对象,Reader...
分类:
其他好文 时间:
2015-08-05 18:00:43
阅读次数:
172