Сокет select() Переключение времени?

Я создал 6 сокетов и одновременно слушаю их все, используя select. Я хочу узнать, сколько времени процессору требуется переключение с 1 сокета на другой. Кто-нибудь знает; если нет, может ли кто-нибудь помочь мне, пожалуйста, о том, как вычислить эту проблему!


person Ansh David    schedule 08.01.2014    source источник
comment
Что вы подразумеваете под переключением с 1 розетки на другую? Функция select не переключается между сокетами, она проверяет, какой сокет получил активность, и с вашей точки зрения можно сказать, что ядро ​​проверяет все сокеты одновременно.   -  person Some programmer dude    schedule 08.01.2014
comment
Что вы уже пытались сделать? Использовали ли вы стандартные инструменты профилирования Linux? См. stackoverflow.com/questions/2229336/linux-application-profiling.   -  person Jackson    schedule 08.01.2014
comment
Я исходил из того, что если мой 1_socket получает 6 байтов данных, а мой 2_socket также получает 6 байтов данных, он сначала разрешит 1_socket, а затем переключится на 2_socket!!!   -  person Ansh David    schedule 08.01.2014
comment
Что это'? Что вы имеете в виду под словом «решить»? А "переключиться"?   -  person user207421    schedule 08.01.2014
comment
Функция select может вернуться с несколькими активными сокетами в наборах. Таким образом, как 1_socket, так и 2_socket (согласно вашему примеру) могут быть, например. набор для чтения, когда select возвращается. Просто нет переключения.   -  person Some programmer dude    schedule 08.01.2014


Ответы (1)


Я думаю, вы, возможно, неправильно поняли, что на самом деле делает вызов select, справочная страница для select говорит следующее:

Наблюдаются три независимых набора файловых дескрипторов. Те, что перечислены в readfds, будут отслеживаться, чтобы увидеть, станут ли символы доступными для чтения (точнее, чтобы увидеть, не блокируется ли чтение; в частности, файловый дескриптор также готов в конце файла), те, что в writefds будут отслеживаться, чтобы убедиться, что запись не будет заблокирована, а те, что находятся в excludefds, будут отслеживаться на наличие исключений. При выходе наборы изменяются на месте, чтобы указать, какие файловые дескрипторы фактически изменили статус. Каждый из трех наборов дескрипторов файлов может быть указан как NULL, если дескрипторы файлов не должны отслеживаться для соответствующего класса событий.

Поэтому, когда ваш вызов select возвращает то, что он скажет вам, какой из файловых дескрипторов (если таковой имеется) готов к чтению (в вашем случае). Дальше уже вам решать, что читать и как читать.

Если вы можете, я бы порекомендовал найти копию Unix Network Programming (Stevens, Fenner, Rudoff). Это даст вам всю справочную информацию и пример кода C, который вам когда-либо понадобится в сетевом программировании.

Или посмотрите учебник здесь

person Jackson    schedule 08.01.2014