为了评估 go 是否是音频/视频应用程序的可能选项,我想知道传入 go 的消息是否满足任何非阻塞进度保证(无阻塞、无锁或无等待)。特别是,以下情况是相关的:
单一生产者单一消费者:
两个线程使用共享通道进行通信。线程 A 只做异步发送,线程 B 只做异步接收。假设 OS 调度程序决定在“可能的最坏时刻”无限期地中断线程 A。线程 B 是否保证在有限数量的 cpu 周期内完成接收操作,或者线程 A 是否有(理论上)可能将通道置于线程 B 需要等待操作系统恢复线程 A 的状态?
多个生产者:
多个线程 A1、A2、A3、... 使用共享通道与一个或多个其他线程通信。线程 Ai 只进行异步发送。假设 A2、A3、... 在“最坏的可能时刻”被 OS 调度程序挂起无限时间。线程 A1 是否仍然保证在有限的 cpu 周期内完成发送操作?进一步假设每个线程只想进行一次发送。如果程序运行的时间足够长(使用“恶意”调度程序,它可能会饿死一些线程或中断并在“最糟糕的时刻”恢复线程),是否至少有一个发送保证成功?
我对这里的典型场景不太感兴趣,而是对最坏情况的保证感兴趣。有关无阻塞、无锁和无等待算法的更多详细信息,请参阅非阻塞算法(维基百科) 。