【发布时间】:2015-03-17 19:21:41
【问题描述】:
我正在开发一个多线程服务器代码,我在其中创建了 2 个线程,它们在 accept() 之后与阻塞的 TCP 套接字交互。
线程 #1 检查是否有来自 msg 队列的命令并将其写入套接字。线程 #2 只是一个简单的 while 循环,它调用 read,然后在没有数据可供读取时阻塞。
但是我的同事告诉我,我不应该使用 read 进行 while 循环,因为它会浪费 CPU 周期(这是一个阻塞 read,内核不是让线程进入睡眠状态吗?),我应该使用select() 系统调用然后读取套接字。
我假设读取线程不正确吗?哪种方法更好?
【问题讨论】:
-
使用什么操作系统?当然——你可以使用 select/poll/epoll。例如:www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_61/rzab6/…
-
这是一个纯Linux程序,准确的说是SLES11。
标签: c multithreading sockets