Безопасно ли объединять select (2) и buffered IO для дескрипторов файлов?

Я использую IO:: Select, чтобы сохранить трек о переменном количестве дескрипторов файлов для чтения. В документации, с которой я сталкивался, настоятельно рекомендуется не объединять оператор select с < > (readline) для чтения из дескрипторов файлов.

Моя ситуация:

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

Для получения дополнительных сведений я являюсь клиентом, отправляющим информацию для обработки моими серверами. Каждый дескриптор файла - это другой сервер, с которым я разговариваю. Как только сервер закончит работу, результат хэша будет отправлен мне от каждого из них. Внутри этого хеша находится число, указывающее количество следующих файлов.

Я хочу использовать readline для интеграции с существующим кодом проекта для передачи объектов и файлов Perl.

Пример кода:

my $read_set = IO::Select()->new;
my $count = @agents_to_run; #array comes as an argument

for $agent ( @agents_to_run ) { 
    ( $sock, my $peerhost, my $peerport ) 
        = server($config_settings{ $agent }->
            { 'Host' },$config_settings{ $agent }->{ 'Port' };
    $read_set->add( $sock );

}

while ( $count > 0) {
    my @rh_set = IO::Select->can_read();

    for my $rh ( @{ $rh_set } ) {

            my %results = <$rh>;
            my $num_files = $results{'numFiles'};
            my @files = ();
            for (my i; i < $num_files; i++) {
                    $files[i]=<$rh>;
            }                 
            #process results, close fh, decrement count, etc
    }
}
-121--1785078- Компиляция библиотеки шаблонов с заголовками в общую библиотеку? Мы находимся в процессе того , чтобы намереваться новой библиотеки C++ и решили использовать подход, основанный на шаблонах, а также некоторые конкретные частичные специализации шаблонов для угловых вариантов. В частности, это...

Мы находимся в процессе того , чтобы намереваться новой библиотеки C++ и решили использовать шаблонный подход наряду с некоторыми конкретными частичными шаблонными специализациями для угловых кейсов. В частности, это будет библиотека шаблонов с заголовками .

Существует некоторое опасение, что это приведет к большому количеству дубликатов кода в двоичных файлах, поскольку этот шаблон «library» будет скомпилирован в любую другую общую библиотеку или исполняемый файл, использующий его (возможно, только те части, которые используются). Я все еще думаю, что это не проблема (в частности, компилятор может даже встроить вещи, которые он не мог бы пересекать границы общей библиотеки).

Однако, поскольку мы знаем конечный набор типов, который будет использоваться для , существует ли способ компиляции этого заголовка в библиотеку и предоставления другого заголовка только с объявлениями и ничего другого? Обратите внимание, что библиотека должна содержать не только общие реализации, но и частичные специализации.

9
задан lytenyn 8 September 2011 в 13:50
поделиться