1. TCP比UDP需要更多的系统资源,没有UDP简单,实时性不高。TCP为什么耗费系统资源?
TCP是面向连接的,虽然连接是指逻辑上而不是物理上的,但是需要内核资源管理连接和在连接上传输数据。
因为TCP有可靠性,有序性,丢失重传,拥塞控制等特点,还需要有发送缓冲区,接收缓冲区,所以更耗费资源。
2. 设计实现一个高并发网络模型,可以使用libev或libevent
3. 你们跟epoll配合的多线程模型是什么?
1)按需创建;来一个连接即创建一个线程,缺点是频繁创建和销毁线程会耗费系统资源,并且一个线程出错会导致整个进程崩溃。
适用于单次连接较长,并发数不高的情况。
2)线程池模型;预先创建多个线程,等任务到来,通过条件变量或其他机制唤醒一个工作线程进行处理。减少了频繁的开销。
适用于单次连接较短,并发相对较高的情况,并发数极高的情况下同按需创建性能相差不大。
4. 模板编译过程
只有在函数模板被调用或者类模板生成对象时编译器才产生特定实例。因为模板的实例化需要知道模板参数,只有模板定义和实现无法完成编译过程,生成目标代码。与一般情况不同,模板实例化时编译器必须能够访问定义模板的源代码。通常使用主流编译器支持的“包含模型”。
{ 模板不能分离编译的原因是如果模板声明和定义分别写在.h和.cpp文件中,那么编译时main.cpp或其他使用模板的模块可以看到模板声明,并认为模板的定义实现在另外的模块中,编译通过,template.cpp编译时(每个.cpp是一个编译单元)可以正确识别模板定义实现,
但不生成定义实现的目标代码,于是程序找不到正确的定义,链接出问题。}