淺談NIO和Epoll實現原理
阿新 • • 發佈:2021-11-24
1 前置知識
1.1 socket是什麼?
就是傳輸控制層tcp連線通訊。1.2 fd是什麼?
fd既file descriptor-檔案描述符。Java中用物件代表輸入輸出流等...在Linux系統中不是面向物件的,是一切皆檔案的,拿檔案來代表輸入輸出流。其實是一個數值,例如1,2,3,4...0是標準輸入,1是標準輸出,2是錯誤輸出... 任何程序在作業系統中都有自己IO對應的檔案描述符,參考如下:[root@iZj6c1dib207c054itjn30Z ~]# ps -ef | grep redis root 20688 1 0 Nov23 ? 00:01:01/opt/redis/bin/redis-server 127.0.0.1:6379 root 20786 1 0 Nov23 ? 00:01:00 /opt/redis/bin/redis-server 127.0.0.1:6380 root 30741 30719 0 12:26 pts/1 00:00:00 grep --color=auto redis [root@iZj6c1dib207c054itjn30Z ~]# cd /proc/20688/fd [root@iZj6c1dib207c054itjn30Z fd]# ll total 0 lrwx------ 1 root root 64 Nov 23 21:500 -> /dev/null lrwx------ 1 root root 64 Nov 23 21:50 1 -> /dev/null lrwx------ 1 root root 64 Nov 23 21:50 2 -> /dev/null lr-x------ 1 root root 64 Nov 23 21:50 3 -> pipe:[27847377] l-wx------ 1 root root 64 Nov 23 21:50 4 -> pipe:[27847377] lrwx------ 1 root root 64 Nov 23 21:50 5 -> anon_inode:[eventpoll] lrwx------ 1 root root 64 Nov 23 21:50 6 -> socket:[27847384]