2013-09-01 31 views
0

我有一個相當奇怪的問題,我真的不知道從哪裏開始尋找正在發生的事情。如何提高多線程應用程序的延遲?

我有一個嚴重的多線程代碼[單個應用程序,20 +線程]正在運行。我發送一個睡眠信號給代碼,幾秒鐘後繼續喚醒信號。當應用程序確實喚醒時,如果我從外部應用程序向某個線程發送某條消息,則延遲很高,並且響應不會使其達到我預期的超時。這是大約10%的時間,其餘90%的代碼正在運行。

值得一提的是RHEL6上的C++,並且很多通信都是通過TCP或應用程序之間的多播進行的。也許我需要做內核調優,不確定。

任何想法,我應該開始尋找?

+5

你有異形呢? – trojanfoe

+1

通常大量多線程的應用程序帶有大量的鎖,並且上下文切換不是免費的,特別是如果你有信號並且你看到不需要的延遲:可能是因爲性能原因信號量不嚴格排序。 – Alex

+0

如何描述從睡眠中醒來的應用程序? – Fanatic23

回答

0

我懷疑你使用kill(2)發送了一個STOPTSTP信號(在​​沒有「睡眠」信號)。

也許不是發送信號,你可以在「控制」fifo或socket上使用一些簡單的文本協議(或者可以使用dbus。然後你只需將該控制套接字或文件描述符添加到由你的事件循環。(如通poll(2)等...)。這是一個通信應用更是正交的。

但你真的應該告訴我們你的代碼,以獲得更精確的提示。

+0

我確實發送STOP並用SIGCONT喚醒。不熟悉dbus。 – Fanatic23