Les traces obtenues sont les suivantes:
2008/10/08 14:50:40.647 - entering select()
2008/10/08 14:50:41.650 - called InvokeLater() from thread #4
2008/10/08 14:50:41.650 - called InvokeLater() from thread #5
2008/10/08 14:50:41.651 - exiting select()
2008/10/08 14:50:41.651 - Chrono #4: Ticks per second: 100 ;
Total ticks: 0 ; User ticks: 0 ; Sys ticks: 0 - Execute
callback
2008/10/08 14:50:41.652 - entering select()
2008/10/08 14:50:41.750 - exiting select()
2008/10/08 14:50:41.750 - Chrono #5: Ticks per second: 100 ;
Total ticks: 10 ; User ticks: 0 ; Sys ticks: 0 - Execute
callback
Chaque chrono est lié à une thread et permet de mesurer le temps entre
l'envoi dans la socket (InvokeLater()) et la réception par la main
thread (Chrono #x).
On voit que les thread #4 et #5 envoie quasi au même moment leur données
(14:50:41.650). Le premier select qui avait commencé avant l'envoi
retourne immédiatement après l'envoi de #4 et le select qui suit va
rester bloqué 100ms (10 ticks) avant de sortir.
Quelqu'un connaitrait-il la raison d'une telle latence du select() ?
Les traces obtenues sont les suivantes:
2008/10/08 14:50:40.647 - entering select()
2008/10/08 14:50:41.650 - called InvokeLater() from thread #4
2008/10/08 14:50:41.650 - called InvokeLater() from thread #5
2008/10/08 14:50:41.651 - exiting select()
2008/10/08 14:50:41.651 - Chrono #4: Ticks per second: 100 ;
Total ticks: 0 ; User ticks: 0 ; Sys ticks: 0 - Execute
callback
2008/10/08 14:50:41.652 - entering select()
2008/10/08 14:50:41.750 - exiting select()
2008/10/08 14:50:41.750 - Chrono #5: Ticks per second: 100 ;
Total ticks: 10 ; User ticks: 0 ; Sys ticks: 0 - Execute
callback
Chaque chrono est lié à une thread et permet de mesurer le temps entre
l'envoi dans la socket (InvokeLater()) et la réception par la main
thread (Chrono #x).
On voit que les thread #4 et #5 envoie quasi au même moment leur données
(14:50:41.650). Le premier select qui avait commencé avant l'envoi
retourne immédiatement après l'envoi de #4 et le select qui suit va
rester bloqué 100ms (10 ticks) avant de sortir.
Quelqu'un connaitrait-il la raison d'une telle latence du select() ?
Les traces obtenues sont les suivantes:
2008/10/08 14:50:40.647 - entering select()
2008/10/08 14:50:41.650 - called InvokeLater() from thread #4
2008/10/08 14:50:41.650 - called InvokeLater() from thread #5
2008/10/08 14:50:41.651 - exiting select()
2008/10/08 14:50:41.651 - Chrono #4: Ticks per second: 100 ;
Total ticks: 0 ; User ticks: 0 ; Sys ticks: 0 - Execute
callback
2008/10/08 14:50:41.652 - entering select()
2008/10/08 14:50:41.750 - exiting select()
2008/10/08 14:50:41.750 - Chrono #5: Ticks per second: 100 ;
Total ticks: 10 ; User ticks: 0 ; Sys ticks: 0 - Execute
callback
Chaque chrono est lié à une thread et permet de mesurer le temps entre
l'envoi dans la socket (InvokeLater()) et la réception par la main
thread (Chrono #x).
On voit que les thread #4 et #5 envoie quasi au même moment leur données
(14:50:41.650). Le premier select qui avait commencé avant l'envoi
retourne immédiatement après l'envoi de #4 et le select qui suit va
rester bloqué 100ms (10 ticks) avant de sortir.
Quelqu'un connaitrait-il la raison d'une telle latence du select() ?
Ce n'est pas bien clair. De quel type de socket s'agit-il (TCP, UDP,
Unix, autre) ?
Il se pourrait simplement que le système fasse autre chose pendant ce
temps.
Évidemment si ça se produit à chaque fois que vous avez toujours
exactement 100 ms, ce n'est pas crédible.
Vous pouvez tenter un coup de
strace pour essayer de voir s'il se passe des choses étranges.
Ce n'est pas bien clair. De quel type de socket s'agit-il (TCP, UDP,
Unix, autre) ?
Il se pourrait simplement que le système fasse autre chose pendant ce
temps.
Évidemment si ça se produit à chaque fois que vous avez toujours
exactement 100 ms, ce n'est pas crédible.
Vous pouvez tenter un coup de
strace pour essayer de voir s'il se passe des choses étranges.
Ce n'est pas bien clair. De quel type de socket s'agit-il (TCP, UDP,
Unix, autre) ?
Il se pourrait simplement que le système fasse autre chose pendant ce
temps.
Évidemment si ça se produit à chaque fois que vous avez toujours
exactement 100 ms, ce n'est pas crédible.
Vous pouvez tenter un coup de
strace pour essayer de voir s'il se passe des choses étranges.
Vous pouvez tenter un coup de
strace pour essayer de voir s'il se passe des choses étranges.
strace ? On peut lui demander de surveiller des sockets ?
J'ai mis le code de l'exemple, pour aider à la compréhension. Il n'est
pas super propre, mais le but était de constater ce problème de latence
du select().
Vous pouvez tenter un coup de
strace pour essayer de voir s'il se passe des choses étranges.
strace ? On peut lui demander de surveiller des sockets ?
J'ai mis le code de l'exemple, pour aider à la compréhension. Il n'est
pas super propre, mais le but était de constater ce problème de latence
du select().
Vous pouvez tenter un coup de
strace pour essayer de voir s'il se passe des choses étranges.
strace ? On peut lui demander de surveiller des sockets ?
J'ai mis le code de l'exemple, pour aider à la compréhension. Il n'est
pas super propre, mais le but était de constater ce problème de latence
du select().