我有几个一起工作并且需要通信的应用程序。
这些应用程序可以安装在不同的主机上,这些主机可以位于不同的本地网络中,但都通过全球网络连接在一起。
主机可以是Linux(CenOS、Debian、Ubuntu)或Windows(7/10)。
现在,我需要确定哪个主机正在运行应用程序。
要求是: - 在同一主机上运行的每个应用程序都具有相同的“主机 ID” - 每个“主机 ID”在所有主机中都是唯一的
由于主机可以是物理机、虚拟机甚至docker实例,所以我认为我不能将主机名用作“全局唯一ID”。
由于主机可以位于不同的本地网络中,我认为我不能使用本地IP地址作为“全球唯一ID”。
那么,我可以使用哪些数据?也许是网络适配器的 MAC 地址?即使在同一个 docker 的多个实例之间,它是否保证是唯一的?
谢谢。
这里的要点是知道实现等待循环的更有效的解决方案,该循环在每次迭代中轮询一个条件.通过有效,我的意思是"有效的CPU调度".
我知道我的代码中使用的等待条件不是"wakeOne"/"wakeAll"指令所使用的"实际等待条件",但我想知道使用伪等待条件对CPU来说比睡眠更有效.
这里有两个代码片段,它们做同样的事情:等到事情发生.此代码用于工作线程池中.因此,当线程等待时,其他人(或其他一些人)应该处理他们的指令.
第一个使用"睡眠",第二个使用"等待条件".它们是用Qt编写的,但可以很容易地翻译成C++ 11,Boost或任何线程库.
两者都运作良好,但有任何性能差异?我记得我在某处读过:
"睡眠"导致主动等待,因此CPU花费时间等待.
"等待条件"使CPU等待事件,因此CPU在等待期间切换到另一个线程执行
我记得很清楚吗?真的吗 ?使用等待条件更有效地并行执行多个线程?
"睡眠"版本:
while (someCondition == false)
{
sleep(100);
}
// Do some work
Run Code Online (Sandbox Code Playgroud)
"WaitCondition"版本:
QMutex mutex(QMutex::NonRecursive);
QWaitCondition waitCondition;
while (someCondition == false)
{
QMutexLocker locker(&mutex);
waitCondition.wait(&mutex, 100);
}
// Do some work
Run Code Online (Sandbox Code Playgroud) 我QThread在我的应用程序中使用了一些.
我的对象在不同的线程中"活动"(它们的所有者线程为Qt意味着它是不同的)并使用带有排队连接的信号/槽来进行通信.
现在,我有这个问题:
QThread"A"中QThread"B"中然后 :
B::foo从其自己的线程"A" 调用"B"实例上的方法B::foo使用互斥锁保护此方法共享的资源,这里没有问题B::foo从线程"A"执行B::foo方法内部,对象"B"发出信号barSignal我对他的配置有一些疑问:
从不是"B"所有者的线程发出对象"B"的信号是否安全QThread?
用于Qt::AutoConnection在生活在"Qt主线程"中的GUI对象中接收此信号是否安全?
Qt::AutoConnection在生活在它自己的QThread"C" 中的对象"C"中使用a 接收此信号是否安全?
我的测试往往对一切都说"是".通过阅读Qt emit代码,似乎没问题.但它没有在Qt文档中找到任何关于" 从一个不是发射器的所有者线程的线程发出信号 "的内容.
使用 Qt/C++,我需要生成一个仅包含 ASCII 字符子集的字符串:字母、数字、连字符、下划线、句点或冒号。
\n\n作为输入,我可以有任何东西。
\n\n所以我尝试应用一些规则:
\n\nQt/C++ 有没有简单的方法来应用第二条和第三条规则?
\n\n谢谢
\n