@zhongdao
2019-05-04T11:17:17.000000Z
字数 1449
阅读 1664
未分类
在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。
文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作(包括网络socket操作)的系统调用都通过文件描述符。
这个FD就是File Discriptor 中文翻译为文件描述符。
Socket起源于unix,Unix中把所有的资源都看作是文件,包括设备,比如网卡、打印机等等,所以,针对Socket通信,我们在使用网卡,网卡又处理N多链接,每个链接都需要一个对应的描述,也就是惟一的ID,即对应的文件描述符。简单点说也就是 int fd = socket(AF_INET,SOCK_STREAM, 0); 函数socket()返回的就是这个描述符。在传输中我们都要使用这个惟一的ID来确定要往哪个链接上传输数据。
每个进程开启一个soeket连接,都会占用一个文件描述符。
#ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 63562
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 63562
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
这里重点关注open files和max user processes。分别表示:单个进程打开的最大文件数;系统可以申请最大的进程数。
# ulimit -n
1024
HTTP 协议的通信过程:
文件描述符与socket连接
https://www.cnblogs.com/DengGao/p/file_symbol.html
Linux下解决高并发socket最大连接数所受的各种限制(解除IO限制)
https://www.cnblogs.com/yinz/p/5057224.html
linux系统高并发socket最大连接数优化
https://segmentfault.com/a/1190000007959713
一篇搞懂TCP、HTTP、Socket、Socket连接池
https://segmentfault.com/a/1190000014044351
Linux操作系统内核参数优化
https://segmentfault.com/a/1190000002488707
Socket编程基础——面向连接TCP
https://segmentfault.com/a/1190000000628243
图解HTTP——总结
https://segmentfault.com/a/1190000014572024