请简述一下分离线程
pthread_t tid; //线程tid号
pthread_attr_t attr; //设置初始化属性变量
Pthread_attr_init(&attr); //初始化属性
//把线程属性设置为detached状态
Pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
//创建线程
Pthread_create(&tid,&attr,thread_fun,arg);
一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。
请简述select和poll epoll的区别
select与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。
poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制。poll和select同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。
epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。