Часто, заглядывая в требования работодателей, вижу среди прочего строку: требуется знание многопоточного программирования (да в том же Яндексе почти в каждой вакансии разработчика).
Отсюда вопрос: что они обычно вкладывают в это понятие и что для этого нужно знать?
Программирую на С++ уже больше 2х лет, но так ни разу (кроме как на примитивных лабораторных в институте) в работе и не сталкивался с этим понятием.
— Что можно почитать по теме? Какая то классическая литература?
— Какие то классические задачи чтобы потренироваться и развить в этом навыки? Помню, что была задача про обедающих философов.
— Какие есть библиотеки? Помню, что пользовались posixthreads. Слышал про OpenMP — он популярный? Какие нибудь ещё must know библиотеки?
— Слышал про какое то распараллеливание между процессорами. Это что, это как, где почитать?
Совсем ничего не знаю, прошу помощи, ибо надо заполнять пробелы в знаниях :)
Заранее спасибо!
Здравствуйте, fryme, Вы писали:
F>Часто, заглядывая в требования работодателей, вижу среди прочего строку: требуется знание многопоточного программирования (да в том же Яндексе почти в каждой вакансии разработчика). F>Отсюда вопрос: что они обычно вкладывают в это понятие и что для этого нужно знать? F>Программирую на С++ уже больше 2х лет, но так ни разу (кроме как на примитивных лабораторных в институте) в работе и не сталкивался с этим понятием. F>- Что можно почитать по теме? Какая то классическая литература? F>- Какие то классические задачи чтобы потренироваться и развить в этом навыки? Помню, что была задача про обедающих философов. F>- Какие есть библиотеки? Помню, что пользовались posixthreads. Слышал про OpenMP — он популярный? Какие нибудь ещё must know библиотеки? F>- Слышал про какое то распараллеливание между процессорами. Это что, это как, где почитать?
F>Совсем ничего не знаю, прошу помощи, ибо надо заполнять пробелы в знаниях F>Заранее спасибо!
Здравствуйте, placement_new, Вы писали:
_>Здравствуйте, fryme, Вы писали:
F>>Часто, заглядывая в требования работодателей, вижу среди прочего строку: требуется знание многопоточного программирования (да в том же Яндексе почти в каждой вакансии разработчика). F>>Отсюда вопрос: что они обычно вкладывают в это понятие и что для этого нужно знать? F>>Программирую на С++ уже больше 2х лет, но так ни разу (кроме как на примитивных лабораторных в институте) в работе и не сталкивался с этим понятием. F>>- Что можно почитать по теме? Какая то классическая литература? F>>- Какие то классические задачи чтобы потренироваться и развить в этом навыки? Помню, что была задача про обедающих философов. F>>- Какие есть библиотеки? Помню, что пользовались posixthreads. Слышал про OpenMP — он популярный? Какие нибудь ещё must know библиотеки? F>>- Слышал про какое то распараллеливание между процессорами. Это что, это как, где почитать?
F>>Совсем ничего не знаю, прошу помощи, ибо надо заполнять пробелы в знаниях :) F>>Заранее спасибо!
_>менять работу.
ага, а для того, чтобы её поменять нужно знать про многопоточное программирование :)
Здравствуйте, fryme, Вы писали:
F>Здравствуйте, placement_new, Вы писали:
_>>Здравствуйте, fryme, Вы писали:
F>>>Часто, заглядывая в требования работодателей, вижу среди прочего строку: требуется знание многопоточного программирования (да в том же Яндексе почти в каждой вакансии разработчика). F>>>Отсюда вопрос: что они обычно вкладывают в это понятие и что для этого нужно знать? F>>>Программирую на С++ уже больше 2х лет, но так ни разу (кроме как на примитивных лабораторных в институте) в работе и не сталкивался с этим понятием. F>>>- Что можно почитать по теме? Какая то классическая литература? F>>>- Какие то классические задачи чтобы потренироваться и развить в этом навыки? Помню, что была задача про обедающих философов. F>>>- Какие есть библиотеки? Помню, что пользовались posixthreads. Слышал про OpenMP — он популярный? Какие нибудь ещё must know библиотеки? F>>>- Слышал про какое то распараллеливание между процессорами. Это что, это как, где почитать?
F>>>Совсем ничего не знаю, прошу помощи, ибо надо заполнять пробелы в знаниях F>>>Заранее спасибо!
_>>менять работу.
F>ага, а для того, чтобы её поменять нужно знать про многопоточное программирование
Здравствуйте, placement_new, Вы писали:
_>Здравствуйте, fryme, Вы писали:
F>>Здравствуйте, placement_new, Вы писали:
_>>>Здравствуйте, fryme, Вы писали:
F>>>>Часто, заглядывая в требования работодателей, вижу среди прочего строку: требуется знание многопоточного программирования (да в том же Яндексе почти в каждой вакансии разработчика). F>>>>Отсюда вопрос: что они обычно вкладывают в это понятие и что для этого нужно знать? F>>>>Программирую на С++ уже больше 2х лет, но так ни разу (кроме как на примитивных лабораторных в институте) в работе и не сталкивался с этим понятием. F>>>>- Что можно почитать по теме? Какая то классическая литература? F>>>>- Какие то классические задачи чтобы потренироваться и развить в этом навыки? Помню, что была задача про обедающих философов. F>>>>- Какие есть библиотеки? Помню, что пользовались posixthreads. Слышал про OpenMP — он популярный? Какие нибудь ещё must know библиотеки? F>>>>- Слышал про какое то распараллеливание между процессорами. Это что, это как, где почитать?
F>>>>Совсем ничего не знаю, прошу помощи, ибо надо заполнять пробелы в знаниях :) F>>>>Заранее спасибо!
_>>>менять работу.
F>>ага, а для того, чтобы её поменять нужно знать про многопоточное программирование :)
_>Неужели ты не понимаешь, что такое мьютексы и зачем они нужны? _>Можно с этой начать _>http://www.books.ru/shop/books/357604
Спасибо за совет, обязательно почитаю!
А разве всё многопоточное программирование заключается только в знании мьютексов? :)
Здравствуйте, fryme, Вы писали:
F>Здравствуйте, placement_new, Вы писали:
_>>Здравствуйте, fryme, Вы писали:
F>>>Здравствуйте, placement_new, Вы писали:
_>>>>Здравствуйте, fryme, Вы писали:
F>>>>>Часто, заглядывая в требования работодателей, вижу среди прочего строку: требуется знание многопоточного программирования (да в том же Яндексе почти в каждой вакансии разработчика). F>>>>>Отсюда вопрос: что они обычно вкладывают в это понятие и что для этого нужно знать? F>>>>>Программирую на С++ уже больше 2х лет, но так ни разу (кроме как на примитивных лабораторных в институте) в работе и не сталкивался с этим понятием. F>>>>>- Что можно почитать по теме? Какая то классическая литература? F>>>>>- Какие то классические задачи чтобы потренироваться и развить в этом навыки? Помню, что была задача про обедающих философов. F>>>>>- Какие есть библиотеки? Помню, что пользовались posixthreads. Слышал про OpenMP — он популярный? Какие нибудь ещё must know библиотеки? F>>>>>- Слышал про какое то распараллеливание между процессорами. Это что, это как, где почитать?
F>>>>>Совсем ничего не знаю, прошу помощи, ибо надо заполнять пробелы в знаниях F>>>>>Заранее спасибо!
_>>>>менять работу.
F>>>ага, а для того, чтобы её поменять нужно знать про многопоточное программирование
_>>Неужели ты не понимаешь, что такое мьютексы и зачем они нужны? _>>Можно с этой начать _>>http://www.books.ru/shop/books/357604
F>Спасибо за совет, обязательно почитаю! F>А разве всё многопоточное программирование заключается только в знании мьютексов?
Нет, конечно. Но для того, чтобы поменять работу на ту, где придется с этим сталкиваться этого обычно достаточно.
Здравствуйте, placement_new, Вы писали:
_>Здравствуйте, fryme, Вы писали:
F>>Здравствуйте, placement_new, Вы писали:
_>>>Здравствуйте, fryme, Вы писали:
F>>>>Здравствуйте, placement_new, Вы писали:
_>>>>>Здравствуйте, fryme, Вы писали:
F>>>>>>Часто, заглядывая в требования работодателей, вижу среди прочего строку: требуется знание многопоточного программирования (да в том же Яндексе почти в каждой вакансии разработчика). F>>>>>>Отсюда вопрос: что они обычно вкладывают в это понятие и что для этого нужно знать? F>>>>>>Программирую на С++ уже больше 2х лет, но так ни разу (кроме как на примитивных лабораторных в институте) в работе и не сталкивался с этим понятием. F>>>>>>- Что можно почитать по теме? Какая то классическая литература? F>>>>>>- Какие то классические задачи чтобы потренироваться и развить в этом навыки? Помню, что была задача про обедающих философов. F>>>>>>- Какие есть библиотеки? Помню, что пользовались posixthreads. Слышал про OpenMP — он популярный? Какие нибудь ещё must know библиотеки? F>>>>>>- Слышал про какое то распараллеливание между процессорами. Это что, это как, где почитать?
F>>>>>>Совсем ничего не знаю, прошу помощи, ибо надо заполнять пробелы в знаниях :) F>>>>>>Заранее спасибо!
_>>>>>менять работу.
F>>>>ага, а для того, чтобы её поменять нужно знать про многопоточное программирование :)
_>>>Неужели ты не понимаешь, что такое мьютексы и зачем они нужны? _>>>Можно с этой начать _>>>http://www.books.ru/shop/books/357604
F>>Спасибо за совет, обязательно почитаю! F>>А разве всё многопоточное программирование заключается только в знании мьютексов? :)
_>Нет, конечно. Но для того, чтобы поменять работу на ту, где придется с этим сталкиваться этого обычно достаточно.
Теоретически я могу объяснить что такое мьютекс, а вот опыта в применении нету, надо бы как то потренироваться..
Здравствуйте, remark, Вы писали:
R>Здравствуйте, Ytz, Вы писали:
Ytz>>Начни с чтения постов remark'а
R>Я польщён, но я никогда особо не писал про основы. Я бы порекомендовал начать с википедии, и потом по ссылкам оттуда.
R> :beer:
Спасибо, ознакомлюсь с вашими статьями по теме :)
Википедию впринципе прочитал, но там по этому вопросу очень мало информации.
Здравствуйте, fryme, Вы писали:
F>Википедию впринципе прочитал, но там по этому вопросу очень мало информации.
Тебе нужно сперва понимание принципа, чтобы до того момента, когда ты начал читать "про мьютекс", у тебя уже было четкое понимание "мне нужна такая штука, которая делает вот это — так это мьютекс (и прочие др. штуки) и есть!".
Здравствуйте, fryme, Вы писали:
F>Часто, заглядывая в требования работодателей, вижу среди прочего строку: требуется знание многопоточного программирования (да в том же Яндексе почти в каждой вакансии разработчика). F>Отсюда вопрос: что они обычно вкладывают в это понятие и что для этого нужно знать?
Судя по вопросу, о таких классиках как Рихтер и Харт Вы тоже не слышали? Они написали отличные книжки по программированию под Windows, в которых очень хорошо разъяснено про многопоточность. Рихтер подробно пишет про потоки в Windows, а Харт затрагивает более широкий круг вопросов, например дает краткое сравнение Windows thread API и POSIX threads. В общем, рекомендую обе книги:
1. Jeffrey Richter — Windows via C/C++
2. Johnson Hart — Windows System Programming
Здравствуйте, Максим Рогожин, Вы писали:
МР>Здравствуйте, fryme, Вы писали:
F>>Часто, заглядывая в требования работодателей, вижу среди прочего строку: требуется знание многопоточного программирования (да в том же Яндексе почти в каждой вакансии разработчика). F>>Отсюда вопрос: что они обычно вкладывают в это понятие и что для этого нужно знать?
МР>Судя по вопросу, о таких классиках как Рихтер и Харт Вы тоже не слышали? Они написали отличные книжки по программированию под Windows, в которых очень хорошо разъяснено про многопоточность. Рихтер подробно пишет про потоки в Windows, а Харт затрагивает более широкий круг вопросов, например дает краткое сравнение Windows thread API и POSIX threads. В общем, рекомендую обе книги: МР>1. Jeffrey Richter — Windows via C/C++ МР>2. Johnson Hart — Windows System Programming
МР>Успехов!
В том то и дело что эти книги говорят про техническую часть но нефига не приводят примеры их, потоков, правильного приготовления.
Можно долго и много читать про многопоточность, но если ты её на практике не используешь то мало от такого чтения толку.
А все примеры которые встречаешь какие то синтетические, написать функцию выводящую хеловорд, заставить её написать эту хеловорд много раз из разных потоков, ну и всё в таком духе. Вот как применять многопоточность с гуем например? А как это всё завернуть в ООП? Вот это интересные вопросы, но ответов на них я в книгах не встречал, увы. Впрочем это конечно не отменяет ценность этих книг для системных программистов.
Здравствуйте, Максим Рогожин, Вы писали:
МР>Здравствуйте, fryme, Вы писали:
F>>Часто, заглядывая в требования работодателей, вижу среди прочего строку: требуется знание многопоточного программирования (да в том же Яндексе почти в каждой вакансии разработчика). F>>Отсюда вопрос: что они обычно вкладывают в это понятие и что для этого нужно знать?
МР>Судя по вопросу, о таких классиках как Рихтер и Харт Вы тоже не слышали? Они написали отличные книжки по программированию под Windows, в которых очень хорошо разъяснено про многопоточность. Рихтер подробно пишет про потоки в Windows, а Харт затрагивает более широкий круг вопросов, например дает краткое сравнение Windows thread API и POSIX threads. В общем, рекомендую обе книги: МР>1. Jeffrey Richter — Windows via C/C++ МР>2. Johnson Hart — Windows System Programming
МР>Успехов!
Спасибо огромное, вы меня заинтересовали. Порою их в интернете и обязательно посмотрю :)
Тут правда есть один ньюанс: тут уже идет специализация под определенную ОС, а при этом принципы и основы они общие как я понимаю и лучше на них наваливаться. Да и специализируюсь я на linux, чего менять особо не хочется :)
Здравствуйте, fryme, Вы писали:
F>Здравствуйте, Максим Рогожин, Вы писали:
МР>>Здравствуйте, fryme, Вы писали:
F>>>Часто, заглядывая в требования работодателей, вижу среди прочего строку: требуется знание многопоточного программирования (да в том же Яндексе почти в каждой вакансии разработчика). F>>>Отсюда вопрос: что они обычно вкладывают в это понятие и что для этого нужно знать?
МР>>Судя по вопросу, о таких классиках как Рихтер и Харт Вы тоже не слышали? Они написали отличные книжки по программированию под Windows, в которых очень хорошо разъяснено про многопоточность. Рихтер подробно пишет про потоки в Windows, а Харт затрагивает более широкий круг вопросов, например дает краткое сравнение Windows thread API и POSIX threads. В общем, рекомендую обе книги: МР>>1. Jeffrey Richter — Windows via C/C++ МР>>2. Johnson Hart — Windows System Programming
МР>>Успехов!
F>Спасибо огромное, вы меня заинтересовали. Порою их в интернете и обязательно посмотрю F>Тут правда есть один ньюанс: тут уже идет специализация под определенную ОС, а при этом принципы и основы они общие как я понимаю и лучше на них наваливаться. Да и специализируюсь я на linux, чего менять особо не хочется
Попробуй почитать Камерон и Трейси Хьюз — параллельное и распределённое программирование с использованием C++. Там как раз с упором на Linux.
Но опять же, тут нужна прежде всего практика.
Здравствуйте, remark, Вы писали:
R>Я польщён, но я никогда особо не писал про основы. Я бы порекомендовал начать с википедии, и потом по ссылкам оттуда.
Сами по себе абстрактные знания мало полезны. Ну знает человек, что есть мютекс и что с этого? Настоящее понимание проблемы уже имеет ценность, но приходит в процессе решения практических задач и размышлений, почву для которых дают многие ваши темы. Это без лести, просто правда интересная и полезная информация.
Здравствуйте, skeptic, Вы писали:
S>Попробуй почитать Камерон и Трейси Хьюз — параллельное и распределённое программирование с использованием C++. Там как раз с упором на Linux. S>Но опять же, тут нужна прежде всего практика.
Не советую, ИМХО, худшая книга по параллельности, что я читал. Разве, что неполеный справочник по POSIX Threads сойдет. Начните лучше с М. Посыпкин "Технологии параллельного программирования" там и про PThreads есть и про OpenMP со вполне реальными примерами. А там уже после прочтения можно и поглубже поразбираться. Сначала главное "в тему попасть".
Здравствуйте, fryme, Вы писали:
F>Совсем ничего не знаю, прошу помощи, ибо надо заполнять пробелы в знаниях F>Заранее спасибо!
Если, как говоришь, под Linux, советую начать с pthreads. Можешь для начала почитать и поделать примеры из:
W. Richard Stevens — UNIX Network Programming, Volume 2 — Interprocess Communications, Second Edition
Если С++, то потом boost.
А так попробуй реально сделать такие задачки самостоятельно и дать общественности взглянуть:
1. Есть текстовый файл размером от 0 до 1-10 Gb. Отсортировать строки по их значению. При запуске и проектировании учитывать то, что памяти на машине может быть и мало и очень много, кол-во ядер может быть больше (16 к примеру) либо равно 1.
Чуть сложнее: тоже самое, но представь что у тебя кластер машин под Linux, файл храниться на одной, между собой общаться могут по гигабитной сетке.
2. Реализуй пул потоков, процессов (задается пользователем), которые обрабатывает какие-либо запросы от множества клиентов посредством TCP/IP.
Здравствуйте, fryme, Вы писали:
F>>>>>Часто, заглядывая в требования работодателей, вижу среди прочего строку: требуется знание многопоточного программирования (да в том же Яндексе почти в каждой вакансии разработчика). F>>>>>Отсюда вопрос: что они обычно вкладывают в это понятие и что для этого нужно знать?
F>А разве всё многопоточное программирование заключается только в знании мьютексов?
Если вас интересуют ключевые слова, то полезно знать:
1. Примитивы для управления доступа к ресурсам: мьютексы, семафоры, rw-locks (ХЗ как они по русски называются), критические секции.
2. Примитивы для меж-поточного взаимодействия: события (events), условия (conditions)
3. Примитивы для организации совместного выполнения потоков: барьеры (barriers), защелки (count-down latch), ожидание завершения (join)
4. Атомарные операции: всяческие Interlocked-операции в Windows.
5. Блокирующие коллекции — коллекции, в которых вызов get методов блокируется, до появления данных, а put-методы блокируются до освобождения части коллекции get-ами. Как правило, в качестве коллекции используется очередь: некий мастер-поток пишет в очередь задания, а несколько слейвов читают и выполняют.
Пятый пункт плавно перешел к паттернам. Важнейшие:
1. Событийное программирование — Event driven
2. Асинхронное выполнение операций. Операция запускается в одном потоке, выполняется в другом, причем первый поток результатов не ждет. Получит их когда-нибудь потом.
3. Резервирование потоков (thread pool)
Ну, как-то так.
Да, в Windows очень полезно знать и уметь WaitForMultipleObjects