The OpenNET Project / Index page

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

Проект GnuPG представил новую свободную многопоточную библиотеку nPth

09.05.2012 14:07

Представлен первый выпуск новой свободной библиотеки для создания многопоточных приложений - nPth (New GNU Portable Threads Library). Изначально библиотека развивалась в рамках проекта GnuPG с целью создания более совершенной замены стандартной библиотеки GNU Pth, поддерживающей работу в современных операционных системах. Последний корректирующий релиз GNU Pth вышел в 2006 году, а последний значительный выпуск в 2004 году, c тех пор проект не развивается. Так как новая библиотека может представлять интерес и для других проектов, было принято решение развивать nPth в виде обособленного продукта. Код библиотеки распространяется под лицензиями LGPLv3 и GPLv2.

nPth предоставляет API, похожий на GNU Pth, и реализует невытесняющую модель организации работы нитей (non-preemptive, кооперативная многопоточность). Ключевым отличием от GNU Pth является уход от использования собственного диспетчера управления выполнением потоков в пользу стандартных системных реализаций многопоточности. Подобный подход позволяет использовать в приложениях библиотеки не совместимые с GNU Pth.

В программе GnuPG библиотека GNU Pth изначально активно использовалась для обеспечения выполнения вспомогательных сопрограмм. Реализуемая в GNU Pth концепция обеспечивала хорошую читаемость кода, соблюдение безопасности и простоту реализации. Но все достоинства GNU Pth меркли из-за необходимости придумывания "грязных хаков" при необходимости использования дополнительных библиотек, не совместимых с GNU Pth. Желание избавиться от этого недостатка и послужило главным стимулом для создания библиотеки nPth.

Истоки создания nPth начинаются с 2004 года, когда при портировании GnuPG 2 для Windows разработчики столкнулись с необходимостью замены библиотеки GNU Pth, которая не поддерживала данную платформу. Для решения проблемы была создана специальная надстройка над GNU Pth, эмулирующая работу API данной библиотеки, используя Windows API для многопоточности. Впоследствии данный подход показал, что подобная эмуляция является оптимальным способом обеспечения выполнения сопрограмм в GnuPG, особенно с учетом повсеместной поддержки pthreads на всех платформах.

В настоящее время на новую библиотеку уже переведена экспериментальная ветка GnuPG 2.1, поэтому проект nPth уже можно рассматривать как пригодный для повсеместного использования. Из остающихся недоработок, отмечается наличие проблем с переносимостью на некоторые редкие платформы. Но данные проблемы планируется решить к моменту выхода релиза nPth 1.0. На распространённых платформах, в том числе в Linux, kFreeBSD и Android, библиотека собирается и работает без нареканий. Что касается библиотеки GNU Pth, то судя по всему её дни сочтены - в настоящее время в репозитории Debian, кроме GnuPG, данная библиотека находится в зависимостях всего у двух пакетов - zhcon и jabberd14.

  1. Главная ссылка к новости (http://lists.gnupg.org/piperma...)
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/33799-gnupg
Ключевые слова: gnupg, npth, thread, pthreads
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (38) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Stax (ok), 15:27, 09/05/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    То есть на линуксе это будет просто оберткой вокруг pthread с другим API?
     
     
  • 2.2, Аноним (-), 16:22, 09/05/2012 [^] [^^] [^^^] [ответить]  
  • –6 +/
    В линуксе нет тредов.
     
     
  • 3.3, Ag (ok), 16:33, 09/05/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > В линуксе нет тредов.

    Не пишите глупости, есть. Это в «классическом» Unix-е был только fork. И то лет 20 тому назад.

     
     
  • 4.14, nuclight (ok), 22:03, 09/05/2012 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Нету Именно как тредов - нету Это для Linux вообще характерно во многих област... большой текст свёрнут, показать
     
     
  • 5.16, Аноним (-), 22:28, 09/05/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Например, везде кроме ядра есть понятие базовой системы ОС и сторонних программ - а в линуксе нету, там кроме ядра только пакеты.

    Подобный подход является закономерным следствием слабого ресурсного обеспечения.
    Например, в той же FreeBSD сравнительно мало активных мейнтейнеров, и они не могут эффективно поддерживать весь спектр ПО. Поэтому оно разделено на две категории: небольшая базовая система (с более-менее нормальной поддержкой, хотя в последние годы и она сильно сдала), и порты, которые поддерживаются нерегулярно, от случая к случаю.

    В крупных дистрибутивах GNU/Linux подобных проблем просто нет: практически все ПО, включая совершенно некритичное для системы в целом, поддерживается нормально - квалифицированный мейнтейнеров для этого достаточно.

     
     
  • 6.17, nuclight (ok), 22:52, 09/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Не является само по себе, базовая система как понятие развязана с проблемой ресурсов - это ж подход проектирования. У разработчиков коммерческих ОС, хотя бы тех же перечисленных комментом выше Solaris и Windows, тоже не хватает ресурсов? :)
     
     
  • 7.26, Аноним (-), 00:32, 10/05/2012 [^] [^^] [^^^] [ответить]  
  • –1 +/
    В коммерческих ОС подобный подход диктуется принципом уменьшения расходов (и повышения прибыльности). Так что фактор ресурсов здесь тоже играет.

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

     
  • 5.18, Аноним (-), 22:54, 09/05/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Тред в линуксе - просто легковесный процесс. В случае нескольких тредов в одном процессе эти нижележащие легковесные процессы просто разделяют (shared) те же самые атрибуты в виде пространства VM, дескрипторов и др.

    Это не в линуксе, это везде так. Тред от процесса как раз и отличается тем, что у тредов одного процесса общая память и дескрипторы (или "раздельные стек и контекст", что есть то же самое). Хоть в линухе, хоть в Solaris, хоть в BSD (не только FreeBSD), хоть в Windows. А одна структура у этих сущностей или же общая с разными атрибутами — не важно.

     
  • 5.19, Аноним (-), 23:00, 09/05/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Нету. Именно как тредов - нету. Это для Linux вообще характерно во
    > многих областях - есть подход всех обычных ОС, а есть как
    > в линуксе. Например, везде кроме ядра есть понятие базовой системы ОС
    > и сторонних программ - а в линуксе нету, там кроме ядра
    > только пакеты.

    Странно. На *моем* линуксе есть и пакеты, и сторонние программы. Может, вы пользуетесь каким-то не таким линуксом? Не говоря уже о том, что "подход обычных ОС" — ставить всё, что есть в репозиториях, из оных репозиториев. И в линуксе так, и в бсдях, и в солярке, и даже яблоко использует пусть и не идентичный подход, но близкий. Только винда выделывается.

     
     
  • 6.27, Аноним (-), 00:35, 10/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Странно. На *моем* линуксе есть и пакеты, и сторонние программы. Может, вы
    > пользуетесь каким-то не таким линуксом? Не говоря уже о том, что
    > "подход обычных ОС" — ставить всё, что есть в репозиториях, из
    > оных репозиториев. И в линуксе так, и в бсдях, и в
    > солярке, и даже яблоко использует пусть и не идентичный подход, но
    > близкий. Только винда выделывается.

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

     
     
  • 7.40, fi (ok), 16:55, 14/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Все же, в солярке и бсд существует четкое разделение: за базовую систему разработчики ручаются, а остальное пользователь ставит на свой страх и риск.

    А где же по другому???  берем к примеру rhel, sles or ubuntu - за базовую систему разработчики ручаются

     
  • 5.20, Ano (?), 23:11, 09/05/2012 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Поясни экспёрд, чем принципиально "легковесные процессы" отличаются от классических трэдов? И кстати, в русском языке нет слова "нету", грамотей.
     
  • 5.21, FrBrGeorge (ok), 23:22, 09/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Собственно, если начало двухтысячных кто вспомнит

    С тех пор многое поменялось.

     
     
  • 6.38, Аноним (-), 23:51, 10/05/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> Собственно, если начало двухтысячных кто вспомнит
    > С тех пор многое поменялось.

    В мире *BSD с тех пор не поменялось ничего. И они до сих пор считают себя лидерами среди свободных ОС :)

     
  • 5.30, nuclight (ok), 01:32, 10/05/2012 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Лол, повылезали неграмотные тролли, одни не понимают, что важно, а что нет (следующий шаг - договоритесь до #5, который во всех ОС вообще одинаковый, а какая тогда разница, ага), другие не понимают разницы между сторонней программой вообще (есть ОС как цельный продукт, состоящая из ядра и его окружения, а есть все остальные сторонние программы) и способом её упаковки (тарбол с исходниками, пакет, поддерживаемый пусть и производителем репозиторий, какая разница, софт всё равно сторонний).

    А если кому правда интересно, как оно там внутри, я порекомендую хорошую книжку (по которой и пересказал выше) by Роберт Лав, "Разработка ядра Linux" (о сериях 2.6), http://www.ozon.ru/context/detail/id/2918313/

     
  • 5.31, Аноним (-), 13:26, 10/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Ладно б базовая система vs пакеты. Можно ко всему в пакетах привыкнуть. Для кого-то это выглядит возможностью "поставить только нужное" (с наличием базовой системы так сделать никто не запрещает, я знаю ;).

    А вот дефолтное расположение баз того же мускуля в /var/lib и пустующий /var/db, отсутсвие документации (точнее, местами большие пробелы в ней), отсутствие init скрипта для svnserve - всё это бытовые мелочи, с которыми можно справиться и победить, но зачем, если можно по-нормальному? Единственное, что после каждой такой победы ЧСВ поднимается, да. :)

    Не холивара ради (их тут разводить почти бессмысленно), а просто накипело. Peace.

     
  • 3.5, pavlinux (ok), 18:15, 09/05/2012 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Прально, там есть sys_clone(),
    а sys_clone() это обертка для do_fork(),
    do_fork() - обёртка для copy_process()
    а copy_process() это замороченный malloc + куча флагов и блокировок.

    Фсё, пиз...ц, - ни форков, ни тредов не существует, есть:
    ...
    mov eax, proc_data
    jz new_proc
    ...

    Всех с победой!!!

     
     
  • 4.36, Andrew Kolchoogin (?), 23:05, 10/05/2012 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Не совсем так, до победы ещё далеко.

    А вот thread'ов в Линуксе, действительно, нет, и вот почему: во всех нормальных операционных системах есть две операции -- создание процесса и создание потока исполнения. API и название функций значения не имеют -- имеет значение лишь то, что один процесс примерно в 5-6 раз медленнее другого.

    Так вот, в Линуксе fork() и pthread_create() примерно равны, так сказать, "по тяжести". Собственно, именно поэтому в Линуксе thread'ов нет.

     
     
  • 5.37, Аноним (-), 23:50, 10/05/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну линуксоиды же не виноваты, что не стали обвешивать и затормаживать fork(), как это сделано в "нормальных операционных системах".
     
  • 3.7, Аноним (-), 18:35, 09/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > В линуксе нет тредов.

    И процессов тоже нет?

     
     
  • 4.8, pavlinux (ok), 18:38, 09/05/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >> В линуксе нет тредов.
    > И процессов тоже нет?

    Нет, сынок - это фантастика (с) Есть тригеры, которые стираются-записываются, а назвать ты это как хошь можешь.  

     
  • 4.11, Anonymouss (?), 18:46, 09/05/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    И ложки тоже нет
     
  • 4.13, Аноним (-), 18:54, 09/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    ЛОМАЮЩИЕ НОВОСТИ
     
  • 3.9, Аноним (-), 18:44, 09/05/2012 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > В линуксе нет тредов.

    Поздравляю с разморозкой. Вы какого года заморозки, сэр?

     
     
  • 4.28, Аноним (-), 00:36, 10/05/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >> В линуксе нет тредов.
    > Поздравляю с разморозкой. Вы какого года заморозки, сэр?

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

     
     
  • 5.32, Аноним (-), 17:45, 10/05/2012 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Как показывает практика - таки линуксоиды знают о *BSD по страшным сказкам. А там всё нежно и _логично_, и _практично_. И есть хендбук, с которого можно легко начать.
     
     
  • 6.33, Аноним (-), 18:04, 10/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Нежно-нежно, прямо как в макоси :)
     
  • 6.39, Аноним (-), 11:04, 11/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Ну дыкть другой дистр попробуйте
     

  • 1.4, Аноним (-), 18:11, 09/05/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > реализует невытесняющую модель организации работы нитей

    Так это нити (как ruby fibers) или все же потоки (threads)?

     
     
  • 2.6, Анон (?), 18:34, 09/05/2012 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Если уж на то пошло, потоки - это streams. А threads - это волокна.
     
     
  • 3.10, onigurumimo (?), 18:45, 09/05/2012 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Знатоки, мля, словарь уже откройте.
    Fibers - волокна, threads - нити.
     
  • 3.12, Аноним (-), 18:53, 09/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Если уж на то пошло, потоки - это streams. А threads - это волокна.

    Если уж на то пошло, в IT как-то так принято называть потоки инструкций именно тредами. Когда о например CPU говорят что там "2 hardware threads" - имеют в виду что он выполняет 2 потока команд одновременно. Как-то так, да. Термин "streams" почему-то не прижился. Вы лучше англичан знаете как им называть вещи на английском? :)

     
     
  • 4.23, Аноним (-), 00:08, 10/05/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >  Вы лучше англичан знаете как им называть вещи на английском? :)

    мы знаем лучше омерекосов как им называть вещи на английском.

    типа фикс.

     
  • 4.24, BratSinot (?), 00:09, 10/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Stream тоже прижился, только он применяется к потоку информации. Видео например.
     
  • 4.29, Аноним (-), 01:10, 10/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Вы лучше англичан знаете как им называть вещи на английском? :)

    В этой области царит терминологический бардак, не зависящий от носителя языка.

     
  • 2.15, umbr (ok), 22:06, 09/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    это одно и то же
     
     
  • 3.25, Аноним (-), 00:13, 10/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    fiber (хз что там в руби нахерачели под этим понятием) = coroutines = green threads и почти = Non-preemptive threads, cooperative threads.

    Это все != threads

     

  • 1.34, Gordio (?), 20:03, 10/05/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А где самое главное?
    Код с примером использования.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



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

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