|
|
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
Читая про I/O не без удивления заметил, что для этой цели рекомендуется использовать PipedInputStream/PipedOutputStream. Поясните, что они такого особого предоставляют ? Также в меня вседяются опасения после таких формацлировок в javadoc: http://docs.oracle.com/javase/7/docs/api/java/io/PipedInputStream.html Attempting to use both objects from a single thread is not recommended, as it may deadlock the thread Почему просто не сделать какой-то объект, который виден вовлеченным в процесс потоками и записывать в него данные, соблюдая правила happens-before? Что-то в моей логике явно криво. Помогите разобраться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 23:52 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
questioner , Опишите задачу, которую вы решаете. В конкурентной разработке эти пайпы - экзотика. Расшарили переменную между потоками, и вперед. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 23:55 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
DEVcoach, никакой конкретной проблемы не решаю. Улучшаю свои знания в java se. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 23:56 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
redwhite90DEVcoach, никакой конкретной проблемы не решаю. Улучшаю свои знания в java se.Понятно, тогда можете смело забить на эти пайпы :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 00:03 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
DEVcoachredwhite90DEVcoach, никакой конкретной проблемы не решаю. Улучшаю свои знания в java se.Понятно, тогда можете смело забить на эти пайпы :-) а тут слово "эти" несёт какую-то смысловую нагрузку? ну всмысле ещё какие-то пайпы есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 00:17 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
questioner, вот тут про пайпы доходчиво и сердито http://tutorials.jenkov.com/java-nio/pipe.html Кажется больше и добавить нечего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 00:57 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
mayton, хм, а нафига одно и то же в IO и в NIO ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 01:01 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
Почему одно и тоже? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 01:10 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
mayton, по картинке сужу, но я в этой теме совсем плох, поэтому хотелось бы разъяснений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 01:14 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
questionerТакже в меня вседяются опасения после таких формацлировок в javadoc: http://docs.oracle.com/javase/7/docs/api/java/io/PipedInputStream.html Attempting to use both objects from a single thread is not recommended, as it may deadlock the threadПророки предупреждают, что если в вы сделаете чтение из PipedOutputStream, но при этом другая часть ваша вашего кода в этом же потоке (ещё) ничего не записала в PipedInputStream - будет классическая блокировка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 02:14 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
questionerЧитая про I/O не без удивления заметил, что для этой цели рекомендуется использовать PipedInputStream/PipedOutputStream. Подозреваю что исходное утверждение сильно отличается от того что написано здесь. Никто не рекомендует передавать данные между потоками используя Piped Stream. Вы что-то читаете, про Piped Stream. Но это совершенно не обозначает что оно решает задачу передачит данных между потоками для всех случаев жизни. questioner Также в меня вседяются опасения после таких формацлировок в javadoc: http://docs.oracle.com/javase/7/docs/api/java/io/PipedInputStream.html Attempting to use both objects from a single thread is not recommended, as it may deadlock the thread Это ключевой момент для понимания Piped Stream. questionerПочему просто не сделать какой-то объект, который виден вовлеченным в процесс потоками и записывать в него данные, соблюдая правила happens-before? Потому что речь про IO и про Stream, а не про обмен данными между потоками вообще. questionerЧто-то в моей логике явно криво. Помогите разобраться. Логика примерно такая же как при испольховании класса Process. Вы с ним разбирались уже? Когда процесс пишет что-то в out, то ваш Java код, должен это вычитывать. Иначе процесс заблокируется на IO. Так и здесь. Один поток пишет stream, второй читает. Как только один из них перестаёт читать или писать, то второй заблокируется, пытаясь сделать обратную операцию. Можно представить двух человек на ковеере. Один передаёт другому кирпичи. Если передающий займентся чем-то другим, то принимающий будет его ждать. Но не сможет ничего делать. Ведь в любой момент может прилететь кирпич от передающего. И аналогично в обратную сторону. Если принимающий займется чем-то другим, то передающий застопорится с кирпичом в руках. Ни положить. Ни отдать. Только interrupt :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 09:31 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovquestionerТакже в меня вседяются опасения после таких формацлировок в javadoc: пропущено... Пророки предупреждают, что если в вы сделаете чтение из PipedOutputStream, но при этом другая часть ваша вашего кода в этом же потоке (ещё) ничего не записала в PipedInputStream - будет классическая блокировка. А в чем принципиальная разница в один поток это всё делается или в несколько? Для меня классический deadlock это с двумя синхронайзами в разном порядке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 10:05 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, авторМожно представить двух человек на ковеере. Один передаёт другому кирпичи. Если передающий займентся чем-то другим, то принимающий будет его ждать. Но не сможет ничего делать. Ведь в любой момент может прилететь кирпич от передающего. И аналогично в обратную сторону. Если принимающий займется чем-то другим, то передающий застопорится с кирпичом в руках. Ни положить. Ни отдать. Только interrupt :) теперь понятно) Это как в ArrayBlockingQueue например ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 10:12 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczquestionerЧитая про I/O не без удивления заметил, что для этой цели рекомендуется использовать PipedInputStream/PipedOutputStream. Подозреваю что исходное утверждение сильно отличается от того что написано здесь. Никто не рекомендует передавать данные между потоками используя Piped Stream. Вы что-то читаете, про Piped Stream. Но это совершенно не обозначает что оно решает задачу передачит данных между потоками для всех случаев жизни. questioner Также в меня вседяются опасения после таких формацлировок в javadoc: пропущено... Это ключевой момент для понимания Piped Stream. questionerПочему просто не сделать какой-то объект, который виден вовлеченным в процесс потоками и записывать в него данные, соблюдая правила happens-before? Потому что речь про IO и про Stream, а не про обмен данными между потоками вообще. Ок, общественное мнение говорит, что про пайпы стоит знать только то, что они существуют) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 10:14 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
questionerА в чем принципиальная разница в один поток это всё делается или в несколько? В том что в один поток оно не делает в принципе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 10:17 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
questionerОк, общественное мнение говорит, что про пайпы стоит знать только то, что они существуют) Именно. На практике применяется довольно редко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 10:18 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
questionerА в чем принципиальная разница в один поток это всё делается или в несколько?Это как разница между последовательным и параллельным соединением ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 10:30 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
У меня ещё один вброс на эту тему) Тут уже проскользнуло в обсуждении что пайпы бывают в io и в nio. Наша беседа шла про io в основном. Как выяснилось, существует проблема блокировки. а nio ? ее же вроде как позиционируют как неблокируюшее сушество ? получается в ней нет этой проблемы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 12:17 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
redwhite90У меня ещё один вброс на эту тему) Тут уже проскользнуло в обсуждении что пайпы бывают в io и в nio. Наша беседа шла про io в основном. Как выяснилось, существует проблема блокировки. а nio ? ее же вроде как позиционируют как неблокируюшее сушество ? получается в ней нет этой проблемы? JavaDoc лениво ковырять. Но, на сколько я понимаю, все те же самые фишки что и в NIO. Блокирующий\неблокирующий режимы. Блокирующий работает как в IO. Неблокирующий, просто выйдет из метода, сообщив что ничего не записано или не прочитано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 12:24 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, кстати это дедлок? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. P.S. если дважды не оборачивать - всё работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 13:28 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
Там буфер на 1024. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 13:31 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczТам буфер на 1024. буфер чего? как влияет двойное оборачивание? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 13:33 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
redwhite90буфер чего? Буфер байт. Чего же ещё? До его переполнения, вероятно, не блокируется. redwhite90как влияет двойное оборачивание? Это у тебя что-то сродни double penetration? В извращениях ковыряться желания не имею. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 13:37 |
|
||
|
Как передавать данные между потоками(threads) ?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczredwhite90буфер чего? Буфер байт. Чего же ещё? До его переполнения, вероятно, не блокируется. Из ответа понял, что буфер пайпа) redwhite90как влияет двойное оборачивание? Это у тебя что-то сродни double penetration? В извращениях ковыряться желания не имею.[/quot] согласен, извращение, но я предположил, что если пойму как это работает - пойму как декоратор I/O работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 13:59 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=169&tid=2126963]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
47ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 338ms |

| 0 / 0 |
