当我们进行网络编程时,无论您使用多进程,多线程还是select/poll(epoll),只有一个进程/线程要处理同一端口上的接受连接。而且,如果您想利用多核,则需要创建工作进程/线程。但是处理网络连接的范围又如何呢?处理网络连接时,是否有办法利用多核?
我找到了一些 Material 。看来这很难完成。
三向握手将由内核隐式完成。并且在smp结构中,操作系统将分为几个关键区域。同一关键区域不能同时在多个内核上运行。
最佳答案
在PC硬件上运行的所有现代操作系统都已经针对多核CPU对其网络堆栈进行了充分优化。例如,将数据插入和推出网卡的数据包处理代码将独立于TCP/IP堆栈代码,因此硬件中断可以运行到完成而不会干扰TCP代码。
但是,对于大多数实际应用而言,大部分工作是在数据包之间进行的。传入的数据必须进行处理,而传出的数据则必须生成。这取决于应用程序代码,并且该代码可以通过使用多个线程或多个进程来利用多个内核。如何做到最好,取决于应用程序和操作系统。例如,Windows具有I/O completion ports,它将作业发现与多线程作业分派(dispatch)结合在一起。 Linux有epoll。
关于multithreading - 处理网络连接时,是否有办法利用多核?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6327881/