Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: _POSIX_THREAD_THREADS_MAX 64. как увеличить?  (Прочитано 3797 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн pethead

  • Автор темы
  • Любитель
  • *
  • Сообщений: 53
  • Felis silvestris catus sapiens
    • Просмотр профиля
_POSIX_THREAD_THREADS_MAX 64. как увеличить?
« : 16 Ноября 2010, 17:26:23 »
создаю многопоточное приложение.
не дает создавать много потоков.
нашел что есть такой (задается в usr\include\bits\local_lim.h) _POSIX_THREAD_THREADS_MAX задает кол-во потоков на процесс. задано 64. как увеличить? просто вписать и пересобрать приложение?

а всякие там сервера как работают с 16тыщами потоков?
в Windows легко дает 1245 потоков на процесс! неужели linux сосет?
« Последнее редактирование: 16 Ноября 2010, 17:33:32 от pethead »
Arch Linux

Оффлайн mkarasik

  • Участник
  • *
  • Сообщений: 163
    • Просмотр профиля
Re: _POSIX_THREAD_THREADS_MAX 64. как увеличить?
« Ответ #1 : 16 Ноября 2010, 22:28:10 »
Что значит не дает? Какую ошибку возвращает?
Раньше была проблемма с размером стека. Решалось чем то вроде
ulimit -s 1024


Оффлайн pethead

  • Автор темы
  • Любитель
  • *
  • Сообщений: 53
  • Felis silvestris catus sapiens
    • Просмотр профиля
Re: _POSIX_THREAD_THREADS_MAX 64. как увеличить?
« Ответ #2 : 17 Ноября 2010, 05:37:58 »
в момент запуска потока выдает resource temporarily unavailable.
как какои именно по счету потоке это выдает пока не обратил внимания. счетчик прикручу гляну.

на счет стека уже так:

ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 20
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

исправил на 1024.
теперь выдает на потоке №210 (а мне надо хотя бы пару тыщ)

GLib-ERROR **: Cannot create pipe main loop wake-up: Слишком много открытых файлов

aborting...
Аварийный останов


« Последнее редактирование: 17 Ноября 2010, 06:06:34 от pethead »
Arch Linux

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: _POSIX_THREAD_THREADS_MAX 64. как увеличить?
« Ответ #3 : 17 Ноября 2010, 12:07:13 »
Думаю всякие там сервера не работают с "16тыщами" потоков.
Почитай man epoll

Оффлайн maximum2000

  • Активист
  • *
  • Сообщений: 403
    • Просмотр профиля
Re: _POSIX_THREAD_THREADS_MAX 64. как увеличить?
« Ответ #4 : 17 Ноября 2010, 12:17:13 »
Может быть Nvidia CUDA или OpenCL?  :)

Оффлайн pethead

  • Автор темы
  • Любитель
  • *
  • Сообщений: 53
  • Felis silvestris catus sapiens
    • Просмотр профиля
Re: _POSIX_THREAD_THREADS_MAX 64. как увеличить?
« Ответ #5 : 17 Ноября 2010, 12:24:32 »
и это все что можно услышать от мастеров Linuxа?
ладно. обращусь к буржуям, там толерантней народец.
Arch Linux

Оффлайн maximum2000

  • Активист
  • *
  • Сообщений: 403
    • Просмотр профиля
Re: _POSIX_THREAD_THREADS_MAX 64. как увеличить?
« Ответ #6 : 17 Ноября 2010, 19:08:57 »
и это все что можно услышать от мастеров линукса?
ладно. обращусь к буржуям, там толерантней народец.

Грубо и не по адресу.

Для начала, я не мастер линукса и тем более НЕ телепат..

покажи код, который создает "много потоков".... тогда уже тема для разговора будет !  :)

Пользователь решил продолжить мысль 17 Ноября 2010, 19:19:28:
+ статья "An API for Programming with Millions of Lightweight Threads" заставляет задуматься о эффективности такого решения на 1-4 ядерных процессорах и посмотреть в сторону CUDA (зависит от Вашей задачи конечно)
(это PDF файл, находится любым поисковиком....)


« Последнее редактирование: 17 Ноября 2010, 19:24:47 от maximum2000 »

Оффлайн pethead

  • Автор темы
  • Любитель
  • *
  • Сообщений: 53
  • Felis silvestris catus sapiens
    • Просмотр профиля
Re: _POSIX_THREAD_THREADS_MAX 64. как увеличить?
« Ответ #7 : 17 Ноября 2010, 19:42:54 »
зачем мне CUDA (если бы еще знать что это), когда мое приложение в винде (не вебсервер), создает более 1000 потоков влегкую (и это не предел), на обычном пентиуме, процессор тут не при чем, главное что ОС сумела это все создать. мне не надо миллионы, мне пару тыщ.
а мне надо систему переписать под linux, вот и попробовал дла начала наплодить потоки, а хрен.
может конечно я ошибся с дистрибутивом, пробую на обычной убунте, может нужна серверная сборка? но веьд Windows не серверная, а обычная хрюша.


Arch Linux

Оффлайн maximum2000

  • Активист
  • *
  • Сообщений: 403
    • Просмотр профиля
Re: _POSIX_THREAD_THREADS_MAX 64. как увеличить?
« Ответ #8 : 17 Ноября 2010, 20:12:59 »
1. Читай статью.....
2. Обозначь задачу, для которой создается тысячи потоков
3. Код в студию....

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: _POSIX_THREAD_THREADS_MAX 64. как увеличить?
« Ответ #9 : 17 Ноября 2010, 23:04:25 »
Ну а разве

GLib-ERROR **: Cannot create pipe main loop wake-up: Слишком много открытых файлов

не упирается в

open files                      (-n) 1024

???

Оффлайн pethead

  • Автор темы
  • Любитель
  • *
  • Сообщений: 53
  • Felis silvestris catus sapiens
    • Просмотр профиля
Re: _POSIX_THREAD_THREADS_MAX 64. как увеличить?
« Ответ #10 : 18 Ноября 2010, 06:30:41 »
в Windows код работает и дает от процесса 1200 потоков (если верить дисптечеру задач то 1204), в Linuxе код сваливается с сообщением
QThread::start: Thread creation error: Ресурс временно недоступен.
если задать стек 1024 то сваливается в
...
557
GLib-ERROR **: Cannot create pipe main loop wake-up: Слишком много открытых файлов
#include <QtGui>

// ======================================================================
class MyThread : public QThread {
Q_OBJECT
private:
    int m_nValue;

public:
    MyThread() : m_nValue(1000)
    {
    }

    void run()
    {
while (true) {
msleep(m_nValue);
//qDebug() <<  QThread::currentThreadId();

}
    }
};

// ----------------------------------------------------------------------
int main(int argc, char** argv)
{
    QApplication app(argc, argv);

    MyThread     *thread;

    for (int i=0;i<1201;++i){
thread=new MyThread();
   thread->start();
qDebug() << i;
}
 
    return app.exec();
}

#include "main.moc"

Arch Linux

Оффлайн maximum2000

  • Активист
  • *
  • Сообщений: 403
    • Просмотр профиля
Re: _POSIX_THREAD_THREADS_MAX 64. как увеличить?
« Ответ #11 : 18 Ноября 2010, 08:00:02 »
Ok. Сегодня попробую запустить у себя......

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: _POSIX_THREAD_THREADS_MAX 64. как увеличить?
« Ответ #12 : 18 Ноября 2010, 08:10:59 »
(Нажмите, чтобы показать/скрыть)

yurik@ubuntu:~/work/ThreadTest$ ulimit -u
unlimited
yurik@ubuntu:~/work/ThreadTest$ ./dist/Debug/GNU-Linux-x86/threadtest
In main: creating thread 0
In main: creating thread 1
...
In main: creating thread 4998
In main: creating thread 4999
^Z
[1]+  Остановлено  ./dist/Debug/GNU-Linux-x86/threadtest
yurik@ubuntu:~/work/ThreadTest$ cat /proc/18267/status | grep Threads
Threads: 5001
yurik@ubuntu:~/work/ThreadTest$ fg
./dist/Debug/GNU-Linux-x86/threadtest
^C
In main: stopped thread 0
In main: stopped thread 1
...
In main: stopped thread 4998
In main: stopped thread 4999
yurik@ubuntu:~/work/ThreadTest$  echo $?
0
yurik@ubuntu:~/work/ThreadTest$
Что я делаю не так?

Надо учитывать что на каждый поток выделяется довольно большой стек. Может попросту не хватить памяти. Можно управлять размером стека.
Помоему все проблемы от неумения пользоваться фреймворком.

P.S. а про epoll таки прочитай. (Linux - epoll, *BSD - kqueue, win - IOCP)
« Последнее редактирование: 18 Ноября 2010, 08:38:49 от Yurror »

Оффлайн maximum2000

  • Активист
  • *
  • Сообщений: 403
    • Просмотр профиля
Re: _POSIX_THREAD_THREADS_MAX 64. как увеличить?
« Ответ #13 : 18 Ноября 2010, 08:20:36 »
(Нажмите, чтобы показать/скрыть)


Да, проблема,........ и похоже в QT :(

любопытно, что создается разное количество (5ХХ, 6хх, 7хх) до появления ошибки.

далее 2 варианта - 1. читать статью указанную выше 2. или делать как Yurror....
« Последнее редактирование: 18 Ноября 2010, 08:24:16 от maximum2000 »

Оффлайн pethead

  • Автор темы
  • Любитель
  • *
  • Сообщений: 53
  • Felis silvestris catus sapiens
    • Просмотр профиля
Re: _POSIX_THREAD_THREADS_MAX 64. как увеличить?
« Ответ #14 : 18 Ноября 2010, 08:44:39 »
"Помоему все проблемы от неумения пользоваться фреймворком."
научи. это пример из книжки по Qt.
мой код пробовал? не работает у тебя?
« Последнее редактирование: 18 Ноября 2010, 08:57:19 от pethead »
Arch Linux

 

Страница сгенерирована за 4.604 секунд. Запросов: 26.