Re: многопоточное программирование
От: Ytz https://github.com/mtrempoltsev
Дата: 09.12.10 11:10
Оценка: 1 (1) +1 -1
Начни с чтения постов remark'а
Re[2]: многопоточное программирование
От: skeptic  
Дата: 09.12.10 15:02
Оценка: +2
Здравствуйте, Максим Рогожин, Вы писали:

МР>Здравствуйте, fryme, Вы писали:


F>>Часто, заглядывая в требования работодателей, вижу среди прочего строку: требуется знание многопоточного программирования (да в том же Яндексе почти в каждой вакансии разработчика).

F>>Отсюда вопрос: что они обычно вкладывают в это понятие и что для этого нужно знать?

МР>Судя по вопросу, о таких классиках как Рихтер и Харт Вы тоже не слышали? Они написали отличные книжки по программированию под Windows, в которых очень хорошо разъяснено про многопоточность. Рихтер подробно пишет про потоки в Windows, а Харт затрагивает более широкий круг вопросов, например дает краткое сравнение Windows thread API и POSIX threads. В общем, рекомендую обе книги:

МР>1. Jeffrey Richter — Windows via C/C++
МР>2. Johnson Hart — Windows System Programming

МР>Успехов!


В том то и дело что эти книги говорят про техническую часть но нефига не приводят примеры их, потоков, правильного приготовления.
Можно долго и много читать про многопоточность, но если ты её на практике не используешь то мало от такого чтения толку.
А все примеры которые встречаешь какие то синтетические, написать функцию выводящую хеловорд, заставить её написать эту хеловорд много раз из разных потоков, ну и всё в таком духе. Вот как применять многопоточность с гуем например? А как это всё завернуть в ООП? Вот это интересные вопросы, но ответов на них я в книгах не встречал, увы. Впрочем это конечно не отменяет ценность этих книг для системных программистов.
Re: многопоточное программирование
От: Crazy Penguin  
Дата: 10.12.10 08:33
Оценка: 2 (1)
Здравствуйте, 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.
Re: многопоточное программирование
От: Максим Рогожин Россия  
Дата: 09.12.10 14:43
Оценка: 1 (1)
Здравствуйте, fryme, Вы писали:

F>Часто, заглядывая в требования работодателей, вижу среди прочего строку: требуется знание многопоточного программирования (да в том же Яндексе почти в каждой вакансии разработчика).

F>Отсюда вопрос: что они обычно вкладывают в это понятие и что для этого нужно знать?

Судя по вопросу, о таких классиках как Рихтер и Харт Вы тоже не слышали? Они написали отличные книжки по программированию под Windows, в которых очень хорошо разъяснено про многопоточность. Рихтер подробно пишет про потоки в Windows, а Харт затрагивает более широкий круг вопросов, например дает краткое сравнение Windows thread API и POSIX threads. В общем, рекомендую обе книги:
1. Jeffrey Richter — Windows via C/C++
2. Johnson Hart — Windows System Programming

Успехов!
Re[2]: многопоточное программирование
От: fryme  
Дата: 09.12.10 10:04
Оценка: :)
Здравствуйте, placement_new, Вы писали:

_>Здравствуйте, fryme, Вы писали:


F>>Часто, заглядывая в требования работодателей, вижу среди прочего строку: требуется знание многопоточного программирования (да в том же Яндексе почти в каждой вакансии разработчика).

F>>Отсюда вопрос: что они обычно вкладывают в это понятие и что для этого нужно знать?
F>>Программирую на С++ уже больше 2х лет, но так ни разу (кроме как на примитивных лабораторных в институте) в работе и не сталкивался с этим понятием.
F>>- Что можно почитать по теме? Какая то классическая литература?
F>>- Какие то классические задачи чтобы потренироваться и развить в этом навыки? Помню, что была задача про обедающих философов.
F>>- Какие есть библиотеки? Помню, что пользовались posixthreads. Слышал про OpenMP — он популярный? Какие нибудь ещё must know библиотеки?
F>>- Слышал про какое то распараллеливание между процессорами. Это что, это как, где почитать?

F>>Совсем ничего не знаю, прошу помощи, ибо надо заполнять пробелы в знаниях :)

F>>Заранее спасибо!

_>менять работу.


ага, а для того, чтобы её поменять нужно знать про многопоточное программирование :)
Re[2]: многопоточное программирование
От: remark Россия http://www.1024cores.net/
Дата: 09.12.10 11:12
Оценка: +1
Здравствуйте, Ytz, Вы писали:

Ytz>Начни с чтения постов remark'а


Я польщён, но я никогда особо не писал про основы. Я бы порекомендовал начать с википедии, и потом по ссылкам оттуда.


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
многопоточное программирование
От: fryme  
Дата: 09.12.10 09:59
Оценка:
Часто, заглядывая в требования работодателей, вижу среди прочего строку: требуется знание многопоточного программирования (да в том же Яндексе почти в каждой вакансии разработчика).
Отсюда вопрос: что они обычно вкладывают в это понятие и что для этого нужно знать?
Программирую на С++ уже больше 2х лет, но так ни разу (кроме как на примитивных лабораторных в институте) в работе и не сталкивался с этим понятием.
— Что можно почитать по теме? Какая то классическая литература?
— Какие то классические задачи чтобы потренироваться и развить в этом навыки? Помню, что была задача про обедающих философов.
— Какие есть библиотеки? Помню, что пользовались posixthreads. Слышал про OpenMP — он популярный? Какие нибудь ещё must know библиотеки?
— Слышал про какое то распараллеливание между процессорами. Это что, это как, где почитать?

Совсем ничего не знаю, прошу помощи, ибо надо заполнять пробелы в знаниях :)
Заранее спасибо!
многопоточность
Re: многопоточное программирование
От: placement_new  
Дата: 09.12.10 10:02
Оценка:
Здравствуйте, fryme, Вы писали:

F>Часто, заглядывая в требования работодателей, вижу среди прочего строку: требуется знание многопоточного программирования (да в том же Яндексе почти в каждой вакансии разработчика).

F>Отсюда вопрос: что они обычно вкладывают в это понятие и что для этого нужно знать?
F>Программирую на С++ уже больше 2х лет, но так ни разу (кроме как на примитивных лабораторных в институте) в работе и не сталкивался с этим понятием.
F>- Что можно почитать по теме? Какая то классическая литература?
F>- Какие то классические задачи чтобы потренироваться и развить в этом навыки? Помню, что была задача про обедающих философов.
F>- Какие есть библиотеки? Помню, что пользовались posixthreads. Слышал про OpenMP — он популярный? Какие нибудь ещё must know библиотеки?
F>- Слышал про какое то распараллеливание между процессорами. Это что, это как, где почитать?

F>Совсем ничего не знаю, прошу помощи, ибо надо заполнять пробелы в знаниях

F>Заранее спасибо!

менять работу.
Re[3]: многопоточное программирование
От: placement_new  
Дата: 09.12.10 10:42
Оценка:
Здравствуйте, 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
Re[4]: многопоточное программирование
От: fryme  
Дата: 09.12.10 10:45
Оценка:
Здравствуйте, 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

Спасибо за совет, обязательно почитаю!
А разве всё многопоточное программирование заключается только в знании мьютексов? :)
Re[5]: многопоточное программирование
От: placement_new  
Дата: 09.12.10 10:56
Оценка:
Здравствуйте, 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>А разве всё многопоточное программирование заключается только в знании мьютексов?

Нет, конечно. Но для того, чтобы поменять работу на ту, где придется с этим сталкиваться этого обычно достаточно.
Re[6]: многопоточное программирование
От: fryme  
Дата: 09.12.10 11:00
Оценка:
Здравствуйте, 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>>А разве всё многопоточное программирование заключается только в знании мьютексов? :)

_>Нет, конечно. Но для того, чтобы поменять работу на ту, где придется с этим сталкиваться этого обычно достаточно.


Теоретически я могу объяснить что такое мьютекс, а вот опыта в применении нету, надо бы как то потренироваться..
Re[3]: многопоточное программирование
От: fryme  
Дата: 09.12.10 11:20
Оценка:
Здравствуйте, remark, Вы писали:

R>Здравствуйте, Ytz, Вы писали:


Ytz>>Начни с чтения постов remark'а


R>Я польщён, но я никогда особо не писал про основы. Я бы порекомендовал начать с википедии, и потом по ссылкам оттуда.


R> :beer:


Спасибо, ознакомлюсь с вашими статьями по теме :)
Википедию впринципе прочитал, но там по этому вопросу очень мало информации.
Re[4]: многопоточное программирование
От: The Lex Украина  
Дата: 09.12.10 13:22
Оценка:
Здравствуйте, fryme, Вы писали:

F>Википедию впринципе прочитал, но там по этому вопросу очень мало информации.


Тебе нужно сперва понимание принципа, чтобы до того момента, когда ты начал читать "про мьютекс", у тебя уже было четкое понимание "мне нужна такая штука, которая делает вот это — так это мьютекс (и прочие др. штуки) и есть!".
Голь на выдумку хитра, однако...
Re[2]: многопоточное программирование
От: fryme  
Дата: 09.12.10 15:03
Оценка:
Здравствуйте, Максим Рогожин, Вы писали:

МР>Здравствуйте, fryme, Вы писали:


F>>Часто, заглядывая в требования работодателей, вижу среди прочего строку: требуется знание многопоточного программирования (да в том же Яндексе почти в каждой вакансии разработчика).

F>>Отсюда вопрос: что они обычно вкладывают в это понятие и что для этого нужно знать?

МР>Судя по вопросу, о таких классиках как Рихтер и Харт Вы тоже не слышали? Они написали отличные книжки по программированию под Windows, в которых очень хорошо разъяснено про многопоточность. Рихтер подробно пишет про потоки в Windows, а Харт затрагивает более широкий круг вопросов, например дает краткое сравнение Windows thread API и POSIX threads. В общем, рекомендую обе книги:

МР>1. Jeffrey Richter — Windows via C/C++
МР>2. Johnson Hart — Windows System Programming

МР>Успехов!


Спасибо огромное, вы меня заинтересовали. Порою их в интернете и обязательно посмотрю :)
Тут правда есть один ньюанс: тут уже идет специализация под определенную ОС, а при этом принципы и основы они общие как я понимаю и лучше на них наваливаться. Да и специализируюсь я на linux, чего менять особо не хочется :)
Re[3]: многопоточное программирование
От: skeptic  
Дата: 09.12.10 15:07
Оценка:
Здравствуйте, 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.
Но опять же, тут нужна прежде всего практика.
Re[3]: многопоточное программирование
От: Ytz https://github.com/mtrempoltsev
Дата: 09.12.10 17:42
Оценка:
Здравствуйте, remark, Вы писали:

R>Я польщён, но я никогда особо не писал про основы. Я бы порекомендовал начать с википедии, и потом по ссылкам оттуда.


Сами по себе абстрактные знания мало полезны. Ну знает человек, что есть мютекс и что с этого? Настоящее понимание проблемы уже имеет ценность, но приходит в процессе решения практических задач и размышлений, почву для которых дают многие ваши темы. Это без лести, просто правда интересная и полезная информация.
Re[4]: многопоточное программирование
От: Sash_xp  
Дата: 10.12.10 06:05
Оценка:
Здравствуйте, skeptic, Вы писали:

S>Попробуй почитать Камерон и Трейси Хьюз — параллельное и распределённое программирование с использованием C++. Там как раз с упором на Linux.

S>Но опять же, тут нужна прежде всего практика.

Не советую, ИМХО, худшая книга по параллельности, что я читал. Разве, что неполеный справочник по POSIX Threads сойдет. Начните лучше с М. Посыпкин "Технологии параллельного программирования" там и про PThreads есть и про OpenMP со вполне реальными примерами. А там уже после прочтения можно и поглубже поразбираться. Сначала главное "в тему попасть".
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Re[5]: многопоточное программирование
От: npak Россия  
Дата: 10.12.10 22:49
Оценка:
Здравствуйте, 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.