The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Оптимизация ввода/вывода при помощи POSIX AIO API

03.09.2006 13:37

В статье "Boost application performance using asynchronous I/O" рассказывается про оптимизацию производительности приложений используя средства асинхронного ввода/вывода в Linux.

В материале "POSIX Asynchronous I/O" представлен текст главы посвященный асинхронному вводу/выводу из книги "Advanced Programming in the UNIX® Environment";

  1. Главная ссылка к новости (http://www-128.ibm.com/develop...)
Лицензия: CC-BY
Тип: английский / Практикум
Короткая ссылка: https://opennet.ru/8275-aio
Ключевые слова: aio, select, io
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (14) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, pavlinux (??), 18:41, 03/09/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    - if ((ret = aio_return( &my_iocb )) > 0)
    + if ((ret = aio_return( &my_aiocb )) > 0)

     
  • 1.2, klalafuda (?), 21:40, 03/09/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/

    на познакомиться IMHO вполне приличная статья, молодцы.

    // wbr

     
  • 1.3, Woody (??), 12:21, 04/09/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я в таких случаях завожу отдельный поток, очередь и бросаю всё в неё. Как по мне такое решение более красивое, наглядное и простое чем полинг состояния AIO.
     
     
  • 2.4, pavlinux (??), 12:28, 04/09/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Дык, в подсистеме AIO тоже есть ниточки - aio_threads :)

    #ifdef __USE_GNU
    extern void aio_init (__const struct aioinit *__init) __THROW;
    #endif

    struct aioinit
      {
        int aio_threads;            /* Maximal number of threads.  */
        int aio_num;                /* Number of expected simultanious requests. */
        int aio_locks;              /* Not used.  */
        int aio_usedba;             /* Not used.  */
        int aio_debug;              /* Not used.  */
        int aio_numusers;           /* Not used.  */
        int aio_idle_time;          /* Number of seconds before idle thread
                                       terminates.  */
        int aio_reserved;
      };


    Только действительно, немного через ж...у получается...


     
     
  • 3.5, Woody (??), 12:38, 04/09/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >Дык, в подсистеме AIO тоже есть ниточки - aio_threads :)

    Но обработка то всё-равно выполняется в одном потоке.

    Если с aio (если верить статье ;) я буду делать:

    -----
      ret = aio_write( &my_aiocb );
      while ( aio_error( &my_aiocb ) == EINPROGRESS )
        do_something();
    -----

    То в случае с потоками получится примерно следующее:
    -----
      queue.add(buf, size);
    -----

    А в соседнем потоке ждём очередь, и потом пишем. Так удобно логеры делать и обработку потока  данных (заводим три потока: reader, writer и worker и понеслось ;)

     
     
  • 4.6, pavlinux (??), 17:29, 04/09/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Ну struct QUEUE, это отдельная история...

    Вот ещё в догону парочка...

    http://lwn.net/Articles/145365
    http://www.bullopensource.org/posix

     
  • 4.7, Анонимоус (?), 18:37, 04/09/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >Но обработка то всё-равно выполняется в одном потоке.
    Для простых дисков и дисковых массивов один поток лучше чем много.По скорости.
     
     
  • 5.8, Woody (??), 18:42, 04/09/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >>Но обработка то всё-равно выполняется в одном потоке.
    >Для простых дисков и дисковых массивов один поток лучше чем много.По скорости.

    Я не то имел в виду. Есть один поток (thread) который пишет на диск. У него есть очередь в которую другие потоки кидают запросы на запись.

     
     
  • 6.9, Супербизон (?), 20:25, 04/09/2006 [^] [^^] [^^^] [ответить]  
  • +/
    а если не диск а сокеты??
     
     
  • 7.10, Woody (??), 20:50, 04/09/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >а если не диск а сокеты??

    Зависит от логики. Либо один сокет на поток, либо несколько и через select/etc.

     
     
  • 8.11, pavlinux (??), 22:40, 04/09/2006 [^] [^^] [^^^] [ответить]  
  • +/
    AIO read and write on sockets doesn t return an explicit error, but quietly def... текст свёрнут, показать
     
  • 8.12, pavlinux (??), 22:40, 04/09/2006 [^] [^^] [^^^] [ответить]  
  • +/
    http lse sourceforge net io aio html... текст свёрнут, показать
     

  • 1.13, J0ester (ok), 07:20, 24/10/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    При использовании сигналов или нитей для уведомления о завершении, нужно ли хранить структуры которые использовались для вызова? или можно не дожидаясь завершения операции заюзать структуру aiocb снова?

    Вобще хочется дать n запросов на ио через lio_listio и двигатся далее

     
  • 1.14, Аноним (14), 09:50, 24/10/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Подскажиете пожалуста, как динамически создать N структур для aio и передать их lio_listio? У меня за цикл разное количество операций и я не могу эффективно использовать уже выделенную память или создать столько сколько нужно.
     
     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру