1.1, pavlinux (??), 18:41, 03/09/2006 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
- if ((ret = aio_return( &my_iocb )) > 0)
+ if ((ret = aio_return( &my_aiocb )) > 0)
| |
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.7, Анонимоус (?), 18:37, 04/09/2006 [^] [^^] [^^^] [ответить]
| +/– |
>Но обработка то всё-равно выполняется в одном потоке.
Для простых дисков и дисковых массивов один поток лучше чем много.По скорости. | |
|
5.8, Woody (??), 18:42, 04/09/2006 [^] [^^] [^^^] [ответить]
| +/– |
>>Но обработка то всё-равно выполняется в одном потоке.
>Для простых дисков и дисковых массивов один поток лучше чем много.По скорости.
Я не то имел в виду. Есть один поток (thread) который пишет на диск. У него есть очередь в которую другие потоки кидают запросы на запись. | |
|
|
7.10, Woody (??), 20:50, 04/09/2006 [^] [^^] [^^^] [ответить]
| +/– |
>а если не диск а сокеты??
Зависит от логики. Либо один сокет на поток, либо несколько и через select/etc. | |
|
|
|
|
|
|
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? У меня за цикл разное количество операций и я не могу эффективно использовать уже выделенную память или создать столько сколько нужно.
| |
|