大数据项目中的数据标注:从踩坑到工程化实践
2026/10/3 4:20:58
所有实验代码都遵循 TCP 通信的基本流程:
socket → bind → listen → accept → recv/send → closesocket → connect → send/recv → closeselect通过一个文件描述符集合(fd_set),同时监听多个 socket,当某个 fd 就绪时再进行处理。
本质:I/O 多路复用(同步阻塞)
使用fd_set保存监听的 fd
select()阻塞等待事件发生
区分监听套接字和通信套接字:
listfd:处理新连接(accept)connfd:处理客户端数据FD_SET(listfd,&tmp_set);select(maxfd+1,&rd_set,NULL,NULL,NULL);✅ 优点:
❌ 缺点:
📌适用场景:
教学实验、小规模并发服务器
epoll是 Linux 提供的高性能 I/O 多路复用机制,采用事件驱动模型。
本质:事件通知 + 回调式处理
epoll_create → epoll_ctl(add) → epoll_wait → 处理事件epoll_add_fd(epfd,listfd);epoll_wait(epfd,events,MAX_EVENTS,-1);✅ 优点:
❌ 缺点:
📌适用场景:
高并发服务器(Web 服务器、即时通信)
每接入一个客户端,服务器fork()一个子进程专门处理该连接。
pid_tpid=fork();if(pid==0){// 子进程处理客户端}✅ 优点:
❌ 缺点:
📌适用场景:
早期 Unix 服务、低并发、可靠性优先场景
每个客户端连接由一个线程处理,共享进程资源。
pthread_create(&tid,NULL,thread_func,&conn);代码中使用了信号量sem_t,防止主线程与子线程之间的竞争:
sem_init(&sem_cli,0,0);sem_wait(&sem_cli);✅ 优点:
❌ 缺点:
📌适用场景:
中等并发服务器、业务逻辑复杂的应用
| 模型 | 并发能力 | 资源开销 | 编程难度 | 适用场景 |
|---|---|---|---|---|
| select | 低 | 低 | ⭐⭐ | 教学、小规模 |
| epoll | 高 | 低 | ⭐⭐⭐⭐ | 高并发服务器 |
| fork | 中 | 高 | ⭐⭐ | 稳定性优先 |
| pthread | 中高 | 中 | ⭐⭐⭐ | 通用服务器 |