нити и волокна

  • Автор темы Admin
  • Дата начала
A

Admin

Гость
#1
мне необходимо привести примеры программ, где применение нитей приводит к существенному повышению скорости их выполнения и обьяснить почему? То же самое для волокон. может кто сможет мне привести такие примеры и хотя-бы немножко обьяснить? :) Может у кого есть хорошие ссылки по этому поводу?
 

Kmet

Well-Known Member
Java Team
25.05.2006
1 036
8
#3
<!--QuoteBegin-Admin+19:10:2007, 19:14 -->
<span class="vbquote">(Admin @ 19:10:2007, 19:14 )</span><!--QuoteEBegin-->мне необходимо привести примеры программ, где применение нитей приводит к существенному повышению скорости их выполнения и обьяснить почему
[snapback]82422" rel="nofollow" target="_blank[/snapback]​
[/quote]

для одно процессорных систем (читать как системы на которых одновременно активным может быть один поток): не приводит к повышению быстродействия, в основном используется для упрощения модели программирования, маскирования латентности блокирующих операций и уменьшения времени отклика

для многопроцессорных систем: прирост действительно возможен, но возросшая стоимость операции синхронизации для потоков выполнящихся на разных ядрах частенько съедает этот прирост.
 
04.09.2006
2 566
2
#4
<!--QuoteBegin-Kmet+19:10:2007, 22:35 -->
<span class="vbquote">(Kmet @ 19:10:2007, 22:35 )</span><!--QuoteEBegin-->частенько съедает этот прирост
[snapback]82435" rel="nofollow" target="_blank[/snapback]​
[/quote]
Факты в студию
 
A

Admin

Гость
#5
для одно процессорных систем (читать как системы на которых одновременно активным может быть один поток): не приводит к повышению быстродействия, в основном используется для упрощения модели программирования, маскирования латентности блокирующих операций и уменьшения времени отклика

для многопроцессорных систем: прирост действительно возможен, но возросшая стоимость операции синхронизации для потоков выполнящихся на разных ядрах частенько съедает этот прирост.
Это о нитях. А волокна?
А где взять примеры программ? Возможен вариант на другом языке, а я переведу в , но желательно (если есть конечно) привести пример на Visual Basic. :lol:
 
P

Pasha

Гость
#7
Все намного хуже :lol: Fibers, Using Fibers.
A fiber is a unit of execution that must be manually scheduled by the application. Fibers run in the context of the threads that schedule them. Each thread can schedule multiple fibers. In general, fibers do not provide advantages over a well-designed multithreaded application. However, using fibers can make it easier to port applications that were designed to schedule their own threads.
Для: Admin. Волокна не обеспечивают одновременности выполнения, только создают его видимость. Т.е. однопоточное приложение выполняет все нити на одном процессоре. Поэтому бонусов от них никаких.
 

Kmet

Well-Known Member
Java Team
25.05.2006
1 036
8
#8
Для: sax_ol, European
ну вообще-то, я имел ввиду достаточно известный факт, что пенальти от использования "средств синхронизация" (мьютексы, критические секции, условные переменные и т.д.) и доступа к разделяемой памяти много больше для потоков выполняющихся на разный ядрах. Это иногда привордит к достаточно комичным ситуациям, когда система разработаная с экстенсивным применением "средств синхронизации" на многопроцессорной системе работает в разы медленней.
 
G

gerich

Гость
#9
Честно говоря всегда пологал,что многопоточное приложение работает быстрее, т.к. по-моему, на каздый поток выделяется определённое процессорное время, а в сумме на эти потоки выделяется в несколько раз больше времени.

А про потоки-ВБ потоки практически невозможно сделать, точнее возможно, но они очень нестабильны(у меня максимум 10 сек работали)-попробуй АПИшные функции посмотреть.
Ещё мозно поглядеть вот это-там один гений создаёт плагин к ВБ для создания чистых(не активиксы) dllки
Как мне где-то написали, они могут пригодиться при создании потоков
 
P

Pasha

Гость
#10
<!--QuoteBegin-gerich+21:10:2007, 22:11 -->
<span class="vbquote">(gerich @ 21:10:2007, 22:11 )</span><!--QuoteEBegin-->Честно говоря всегда пологал,что многопоточное приложение работает быстрее, т.к. по-моему, на каздый поток выделяется определённое процессорное время, а в сумме на эти потоки выделяется в несколько раз больше времени.
[snapback]82546" rel="nofollow" target="_blank[/snapback]​
[/quote]Количество времени, выделяемое процессу, не зависит от количества потоков в нем. Поэтому многопоточное приложение работает быстрее однопоточного только на многопроцессорной машине.
<!--QuoteBegin-gerich+21:10:2007, 22:11 -->
<span class="vbquote">(gerich @ 21:10:2007, 22:11 )</span><!--QuoteEBegin-->А про потоки-ВБ потоки практически невозможно сделать, точнее возможно, но они очень нестабильны(у меня максимум 10 сек работали)-попробуй АПИшные функции посмотреть.
Ещё мозно поглядеть вот это-там один гений создаёт плагин к ВБ для создания чистых(не активиксы) dllки
Как мне где-то написали, они могут пригодиться при создании потоков
[snapback]82546" rel="nofollow" target="_blank[/snapback]​
[/quote]6-й VB, о котором ты говоришь, вымер одновременно с выходом первого vb.net. Плагины для создания чистых длл под него - припарки мертвому. А нормальный современный vb.net вполне так поддерживает потоки.