有没有一种方法可以在没有while循环的情况下在计算机之间传输数据?c++

Is there a way to communicate data between computers without while loops? C++

本文关键字:情况下 计算机 循环 之间 c++ 数据 传输 while 一种 方法 有没有      更新时间:2023-10-16

我一直在努力尝试在谷歌上找到我的答案,因为我不知道我要搜索的确切术语。

如果有人要构建一个类似msn的程序,是否有可能始终打开连接而没有while(true)循环?如果是这样,有人能告诉我如何实现这个目标吗?

使用boost::asio库进行套接字处理,我认为可以在数据接收时定义回调

你要找的一个神奇的词是异步I/O。这可以通过使用异步api(如ReadThis()这样的函数,在成功/失败时立即返回并发出信号——类似但不受boost::asio的限制)或通过延迟对不同线程的阻塞调用来实现。选择任何一种方法都需要仔细权衡底层实现和操作规模。

您需要使用ACE。它有一个Reactor模式,可以在数据可用时通知您。

反应器模式

你可以:

 while(1) {
    sleep(100); // 100 ms
    // check if there is a message
    // process message
    //...
 }

这是可以的,但是在运行上万个线程的服务器上有一个开销,因为线程从睡眠中出来检查消息,导致上下文切换。相反,操作系统提供了像Linux上的selectepoll这样的函数,它们允许线程等待事件。

 while(1) {
    // wait for message
    // process message
    //...
 }

使用wait,线程不会被"唤醒",除非收到消息。

你只能隐藏你的while循环(或某种循环)隐藏在某个库的某个地方,或者在事件回调中重新启动等待下一个IO,但你不能完全避免它。

这个问题问得好。正如nj所说,您希望使用异步I/O。太多的程序使用轮询策略。在一个系统上运行1000个线程并不罕见。如果它们都轮询,系统就会变慢。

udp协议通信怎么样?你不必为每个客户端等待while循环只需在指定端口上打开一个连接并调用接收方法

相关文章: