The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Pthread"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Pthread"
Сообщение от Iodis emailИскать по авторуВ закладки on 29-Июн-03, 15:59  (MSK)
вот возник вопрос:

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

Ведь если такое можно реализовать, то производительность должна подняться, так как не потребуется каждый раз создавать/прибивать тред, а просто передавать нужные параметры. или я не прав?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

  • Pthread, XMan, 19:38 , 29-Июн-03, (1)
    • Pthread, Iodis, 19:42 , 30-Июн-03, (2)
      • Pthread, XMan, 21:27 , 30-Июн-03, (3)
  • Pthread, Olej, 00:47 , 01-Июл-03, (4)

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Pthread"
Сообщение от XMan Искать по авторуВ закладки on 29-Июн-03, 19:38  (MSK)
Такое возможно. Вопрос производительности зависит от решаемой задачи. Например, в своем сервере авторизации я применил технику NetWare - изначально создается N потоков, которые существуют постоянно. При необходимости новые потоки добавляются порциями по M потоков, которые в случае простоя живут K секунд.

Для передачи данных используются определенные структуры (адрес труктуры конкретного потока передается при его запуске). Для запуска, засыпания и завершения потока по таймауту используется "pthread_cond_timedwait" внутри потока.

Получается, что при большой загрузке (куча клиентов полезли говорить, кто они такие) потоки добавляются, а при простое программа отдает ресурсы (в частности, память) системе.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Pthread"
Сообщение от Iodis emailИскать по авторуВ закладки on 30-Июн-03, 19:42  (MSK)
Спасибо за ответ. началось внедрение.

Но тут назрел еще один вопрос - в каких случаях userspace лучше, чем системные треды? или системные всегда на высоте?

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Pthread"
Сообщение от XMan Искать по авторуВ закладки on 30-Июн-03, 21:27  (MSK)
По первому - что подразумевается под "userspace" ?

По второму - передавай соответствующие структуры данных разным потокам при инициализации. Есть два варианта:

1. Ты делаешь разные поточные функции - каждая выполняет свою обработку. В таком случае описываешь разные структуры и передаешь их каждую своей функции;

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

struct xxx {
  int code;
  void *data;
};

где code - признак исполняемой задачи (лучше всего в enum их записать и потом по switch выбирать), data - ссылка на структуру данных для этой задачи. В таком случае при создании потока ты передаешь ему структуру xxx, записав в поле code код задачи и в поле data адрес структуры для этой задачи. В потоке выполняется что-то типа:

switch (param->code) {
  case TAST_TYPE1: struct yyy *data=(struct yyy *)param->data;
                                 // выпоняется задача 1-го типа с данными в стуркуре data (struct yyy)
                                 ..........
                                 break;
  case TAST_TYPE2: struct zzz *data=(struct yyy *)param->data;
                                 // выпоняется задача 2-го типа с данными в стуркуре data (struct zzz)
                                 ..........
                                 break;
  ............
};

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Pthread"
Сообщение от Olej Искать по авторуВ закладки on 01-Июл-03, 00:47  (MSK)
>вот возник вопрос:
>
>возможно ли создать, допустим 50 тредов и за все время жизни программы
>не удалять их, а просто передавать туда каждый раз новые параметры.
>
>
>Ведь если такое можно реализовать, то производительность должна подняться, так как не
>потребуется каждый раз создавать/прибивать тред, а просто передавать нужные параметры. или
>я не прав?

Посмотрите здесь:
http://qnx.org.ru/forum/viewtopic.php?topic=1713&forum=14&1
- там ссылка на мою новую статью, написанную для qnx.org.ru всего несколько дней назад, почти о том, и оттуда можно понять сравнительные показатели производительности.

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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