处理网络连接时,有没有办法利用多核?

| 当我们进行网络编程时,无论您使用多进程,多线程还是select / poll(epoll),只有一个进程/线程要处理同一端口上的接受连接。而且,如果您想利用多核,则需要创建工作进程/线程。但是如何处理网络连接又会如何呢?处理网络连接时,有没有办法利用多核? 我找到了一些材料。看来这很难完成。 三向握手将由内核隐式完成。并且在smp结构中,操作系统将分为几个关键区域。同一关键区域不能同时在多个内核上运行。     
已邀请:
        在PC硬件上运行的所有现代操作系统都已经针对多核CPU对其网络堆栈进行了充分优化。例如,将数据推入和推出网卡的数据包处理代码将独立于TCP / IP堆栈代码,因此硬件中断可以运行至完成而不会干扰TCP代码。 但是,对于大多数实际应用而言,大部分工作都在数据包之间。传入的数据必须进行处理,而传出的数据则必须生成。这取决于应用程序代码,并且该代码可以通过使用多个线程或多个进程来利用多个内核。如何做到最好,取决于应用程序和操作系统。例如,Windows具有将作业发现与多线程作业分派结合在一起的I / O完成端口。 Linux有epoll。     
        仅使用网络流量,几乎就由网卡(即不是计算机的CPU)完成。与网卡的通信通常是单线程的(由OS排队,因此您可以在多个线程上发送/接收),因为NIC一次只能将其栈中的内容推送/弹出。 响应接收到的数据,由您的过程来决定需要做的事情。这可以在一个线程上完成,您可以在接收到该主线程上的数据时派生其他线程,然后按这种方式分配工作。如果您有支持异步通信的语言,我将尝试使它完成使用多线程的大部分工作。     

要回复问题请先登录注册