IO管理
ECMA的标准中有2种语言:C#、JS
1、IO?
IO就是Input/Output
2、什么是异步
异步,其实就是不阻塞当前线程,可以让代码继续执行下去的操作就是异步。
X:对象公用的非阻塞式
阻塞与非阻塞、异步与非异步、并行与并发
(1)什么是阻塞与非阻塞?
所谓的阻塞与非阻塞是来描述行为的,也就是没有行为特征,是无法判定一个函数是阻塞的还是非阻塞的。
阻塞的含义:在该动作/函数没有返回之前,不能进入下一行代码,则为阻塞。但是,入宫你的阻塞是程序级别的或进程级别的,那么判断阻塞的标准将会被您的这个背景知识所扩大。扩大为:某一个线程,在某函数没有返回之前,不能进行下一步,则该函数为阻塞,但是该阻塞,其实应当是线程级别阻塞,而非完全阻塞函数。
(2)什么又是异步与非异步?
讲究一个函数是否是异步,要看它的行为,而不是它的代码。
并行必须是异步的,但异步并不以第那个是并行。
(3)什么又是并行与并发呢?
3、异步IO?
FIFO:linux下的一个概念。
epoll、ShareMemory、NamePipeline
windows下有一个最尴尬的情况,TCP的口子,有闭合期(close_wait).zuo jmeter会遇到。
异步IO其实还是来描述IO的。首先要确定当前的操作是不是IO。
万物相对论,没有参照物咱们就没有形容词。异步时形容IO的。
那么,就得设计到同步。
假定:你有一个操作,此时需要读取某个东西,这时候跟CPU已经没有关系了,如果你是依赖于让CPU也牵扯进来,让它等着,完事以后再说,这时候你的程序就处于无响应状态(CPU不可能等你的程序的,它只会等着你唤醒,所以也就是同步IO阻死了至少一个线程)。
这时候,如果你让这个操作相对于当前的线程可以不那么紧急,告诉CPU我知识这个函数到了这里可以跳出了,别的内容你该干啥还是得干。
这时候就异步了。
那么IO呢,就是异步了一下IO操作而已。
4、优点是什么?
在.NET中,说的异步IO就是代指标准的异步IO且能够使用线程池中的IO线程。
第一个优点:不占用资源;
然而,学习过计算机原理的都知道,CPU跟这些IO设备其实在某些时刻时完全可以独立开的。例如内存的DMA(Direct Memory Access)等技术。所以先问一个问题。处理IO的时候会一直占用CPU吗?
5、缺点是什么?
只要异步,就会存在同步的问题。
如果你考虑同步就会存在脏的问题。
如果你不在乎脏,就会有错的问题。
如果上面两个如果你不担心,那么无所谓,如果你担心,你会引申出来一堆的东西,引申什么呢?
6、自己写代码时,这知识有什么用?
7、影响和结论
夯实基础学完后,就应该能自己写出来符合逻辑的、合乎正常水平的代码了。接下来就需要组装这些内容了,如果不组装,可能一辈子也不会有啥用。