自学嵌入式第28天-----select,
select中的难点:
1.文件描述符集合的重复初始化
-
问题:
select
会修改传入的fd_set
,因此每次调用前都需要重新初始化这些集合。 -
解决方法:在循环中使用
select
时,务必在每次调用前重新设置fd_set
,或者使用备份集合来保存原始状态。
2. 超时机制
-
问题:
select
的超时参数是一个指向struct timeval
的指针,超时后需要重新设置。如果超时时间为NULL
,select
会一直阻塞。 -
解决方法:合理设置超时时间,避免长时间阻塞。如果需要精确控制超时,可以使用
timerfd
或epoll
的超时机制。
构建TCP并发服务器:
让TCP服务端具备同时响应多个客户端的能力。
1. 多进程
资源消耗大,同资源平台下,并发量小。
2. 多线程
创建线程、进程,比较耗时
3. 线程池
提前预创建大量线程,避免任务执行过程中创建线程
的耗时