io模型,mysql
多路复用IO(IO multiplexing)
多路复用就是调用select来统一管理多个连接
强调:
1. 如果处理的连接数不是很高的话,使用select/epoll的web server不一定比使用multi-threading + blocking IO的web server性能更好,可能延迟还更大。select/epoll的优势并不是对于单个连接能处理得更快,而是在于能处理更多的连接。
2. 在多路复用模型中,对于每一个socket,一般都设置成为non-blocking,但是,如上图所示,整个用户的process其实是一直被block的。只不过process是被select这个函数block,而不是被socket IO给block。
结论:select的优势在于可以处理多个连接,不适用于单个连接
异步IO(Asynchronous I/O)
用户进程发起read操作之后,立刻就可以开始去做其它的事。而另一方面,从kernel的角度,当它受到一个asynchronous read之后,首先它会立刻返回,所以不会对用户进程产生任何block。然后,kernel会等待数据准备完成,然后将数据拷贝到用户内存,当这一切都完成之后,kernel会给用户进程发送一个signal,告诉它read操作完成了。
数据库
1.数据库是什么?
数据库本质就是一个C/S的套接字软件
常见的数据库:
关系型:mysql(与mariadb相似)、oracle、db2、sqlserver
非关系型:存取数据都是以key:value形式
常见有mongodb、redis、memcache
2.数据库相关概念:
数据库服务器:运行有数据库管理软件的计算机
数据库管理软件(如mysql):一个套接字服务器
库:就是一个文件夹
表:就是一个文件
记录:文件中一行内容(抽取事物一系列典型的特征拼到一起)
数据:用于记录现实世界中的某种状态