假设我们有一个即时消息应用程序,基于客户端-服务器,而不是 p2p。实际的协议并不重要,重要的是服务器架构。可以将所述服务器编码为使用非阻塞套接字以单线程、非并行模式运行,根据定义,这允许我们立即(或立即)有效地执行诸如读写之类的操作。非阻塞套接字的这一特性允许我们在服务器的最核心使用某种选择/轮询功能,几乎没有时间浪费在实际的套接字读/写操作上,而是花时间处理所有这些信息. 据我了解,正确编码,这可以非常快。但是还有第二种方法,那就是积极地多线程,创建一个新线程(显然使用某种线程池,因为在某些平台和某些情况下,该操作可能(非常)慢),并让这些线程并行工作,而主后台线程处理 accept() 和其他东西。我已经在网上的各个地方看到过这种方法的解释,所以它显然确实存在。
现在的问题是,如果我们有非阻塞套接字、即时读/写操作以及简单、易于编码的设计,为什么还要存在第二种变体?我们试图用第二种设计克服什么问题,即线程?AFAIK 这些通常用于解决一些缓慢且可能阻塞的操作,但那里似乎不存在此类操作!