理解Posix API
理解7个Posix API POSIX:可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX )。它是一套标准,Unix与Linux和苹果系统的Unix-base都遵循这个标准,话不多说,赶紧进入正题。 socket() 功能: 分配一个int型的fd。 tcb(tcp控制块),由alloc()创建出来; ...
理解7个Posix API POSIX:可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX )。它是一套标准,Unix与Linux和苹果系统的Unix-base都遵循这个标准,话不多说,赶紧进入正题。 socket() 功能: 分配一个int型的fd。 tcb(tcp控制块),由alloc()创建出来; ...
什么是Reactor reactor用来关注网络中的事件,在处理网络的时候由网络IO的管理变为网络事件管理,其核心的思想就是通过回调函数来处理这些IO,也称为IO事件。每一个不同的IO事件调用不同的回调函数。 Reactor实现关注两点: event与callback的匹配。 每一个IO与之对应。 reactor这里是理解为一个反应堆,将某些IO转换成几类事件进行“注册”,再将...
引言 在上篇[“理解网络IO”]中实现的一请求一线程的方式优点是其代码逻辑简单,但缺点也是很明显的,不太利于并发,若每个线程8M,16G内存大概能做到1k的并发,无法做到更多。 故而需要用多路复用技术如select、poll、epoll。 select fd_set rfds, rset; //将rfds集合清空 FD_ZERO(&rfds); //将...
数据库的基本操作 数据库的基本业务逻辑 这里以登录操作为例,客户端通过网络连接到业务服务器,待其解析后在执行其想要进行的操作,这里是查询,网络连接到数据库进行查询。 1. 数据库连接与初始化操作 MYSQL mysql; //初始化mysql if(NULL == mysql_init(&mysql)){ INFO("mysql in...
线程池的使用场景: 服务器连接通信 在服务器与客户端建立连接进行通信的时候,需要用到多线程进行,如果客户端有10万个,则按照普通做法,即一客户端一线程,需要开10万个线程,而在posix标准的线程,一个有8M,则16G内存只有2048个线程可开,故引出了线程池。 日志文件 磁盘操作远远比内存操作慢很多,在写线程的时候,会引起线程的挂起。故在落盘即执行写操作时与如何写,...
百万并发量服务器 65536端口数的由来 端口数量为65536,这个数字是因为在Linux系统中,系统用一个唯一的四元组来标识一个TCP连接,{本机IP,本机端口,远程IP,远程端口}。而在Linux系统中,端口号这个变量是个unsigned short,占16位,故其端口号有65536个。 TCP建立连接时端口的作用 服务器端通常是用一个端口(如80端口)来进行监听,客户端的访问都是同...
什么是网络IO Socket FD(File Descriptor)是用来标识网络IO与管理网络连接的。在linux中,它仅仅代表一个整数,用来表示当前创建的IO的编号,是在从0开始依次增加。0是标准输入:stdin,1是标准输出:stdout,2是标准错误:stderr。 如下图在客户端连接服务端的时候,服务端创建一个监听的fd等待客户端的连接,在listenfd收到连接请求后,服务端会创...