核心: http是请求应答式的,而我们的应用,下行啥时候发是不确定的!!!
所以才有人搞两个tcp连接,一个专门用来发上行,一个专门用来发下行,这样数据结构不会相互干扰,可以提高并发能力!!!
分析:
nginx用多个进程去分别处理多个fd的read/write, 为何不用一个线程去做数据的读取,而后分发呢? ----默认就一个做数据读取的线程
fd是如何传递的? 如何保证response时,fd是有效的?
{
fd,
read,
write
}
fd的读与写都是在同一个结构体中,所以很容易知道某个fd是否关闭了,如果关闭了,则将这个结构体删除,也就没有了write back!
因为http是请求/应答的结构,因此read, 处理,write back, 所有fd的监控都在这个结构体里面,很好搞!!
但是,我们的应用呢? 啥时候写,是不确定的!!!也就是有内容要写时,必须查表才知道buffer在哪里??关键是fd也不知道是哪个!!!!
必须查查才知道要写到哪个具体的fd!!!