firemail

标题: linux下实现select(),poll(),epoll() I/O多路复用 [打印本页]

作者: java    时间: 2019-2-25 16:03
标题: linux下实现select(),poll(),epoll() I/O多路复用
本帖最后由 java 于 2019-2-26 11:27 编辑

Unix
cc  Unix的c语言编译器,是 c compiler 的缩写

Linux
cc 指向 gcc 兼容 Unix下写的代码,cc是gcc符号连接,可以通过$ls –l /usr/bin/cc来简单察看,该变量是make程序的内建变量
gcc 是GNU compiler collection的缩写,注意这是一个编译器集合,不仅仅是c或c++

g++(C++的编译器) 编译可以用gcc/g++,而链接可以用g++或者gcc -lstdc++。因为gcc命令不能自动和C++程序使用的库联接,所以通常使用g++来完成联接。
后缀为.c的文件gcc把它当做c程序,g++当做c++程序。
所以我们通常用g++来进行连接(g++会自动连接c++常用库),所以为了使用方便对于cpp程序干脆编译链接统统都使用g++。

deepin下默认 cc gcc和 g++如下:
相关符号连接如下:
cc 指向 gcc
/usr/bin/cc -> /etc/alternatives/cc
/etc/alternatives/cc -> /usr/bin/gcc
/usr/bin/gcc -> gcc-7
/usr/bin/gcc-7 -> x86_64-linux-gnu-gcc-7
/usr/bin/x86_64-linux-gnu-gcc-7

g++(C++的编译器)
/usr/bin/g++ -> g++-7
/usr/bin/g++-7 -> x86_64-linux-gnu-g++-7
/usr/bin/x86_64-linux-gnu-g++-7

查看deepin系统 linux内核
uname -r
4.15.0-29deepin-generic





select(),poll(),epoll()都是I/O多路复用的机制。I/O多路复用通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪,就是这个文件描述符进行读写操作之前),能够通知程序进行相应的读写操作。
但select(),poll(),epoll()本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。
I/O 多路复用的最大优势是系统开销小,系统不需要建立新的进程或者线程,也不必维护这些线程和进程。









欢迎光临 firemail (http://firemail.wang:8088/) Powered by Discuz! X3