问题:
一.怎么让前后端通信?
二.如果客户端请求数很多的时候,应该怎么处理?怎么才能保证服务器的稳定性?
三.如何保证数据的准确性?
四.内核态和用户态怎么切换?提高效率
五.如何提高响应速度?
以上的问题都可以由完成端口通信解决。避免了服务器的CPU多次切换线程
异步通信:涉及到三方。应用程序、操作系统、网络IO操作。利用完成端口实现异步通信的机制:当应用程序的线程发送消息时,就把消息放进消息队列,即是完成端口,通知系统要进行网络操作,然后应用程序就去做其他事情,具体的网络通信就由操作系统来控制。当收到网络消息时,操作系统把消息放进完成端口,然后通知应用程序的线程去执行消息队列的请求。这样即实现了负载均衡,线程的数量是CPU数量的两倍,这样也避免了线程之间的切换。
Overlapped:重叠结构。可以理解为网络操作的ID号。
解决方法:
1.完成端口和多线程方式能让用户的请求数量达到几万条,这个需要考虑服务器的吞吐量。
2.直接在内核态读取IO 完成后再切换至用户态。
3.用qmutex 互斥锁保证数据的准确性。
4.服务器避免cpu多次切换线程,避免多次用户态和内核态的切换。
具体实现可参考如下博文: