Облегченные потоки VB 2008

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

felix
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 02.05.2009 (Сб) 14:34

Облегченные потоки VB 2008

Сообщение felix » 02.05.2009 (Сб) 14:40

Подскажите есть ли в Visual Basic 2008 облегченные потоки (не просто потоки windows, а именно "нити")? Ато я что-то не смог найти ничего о них. Если есть, то покажите, пожалуйста, как ими пользоваться.
И еще, если нитей в VB нет, то может кто-нибудь знает каким способом достигается максимально возможная производительность при применении обычных потоков (насколько я понял, существует несколько способов создания и использования обычных потоков, наверное скорость при этом отличается). Я только начинаю изучать Visual Basic, поэтому почти ничего по теме не знаю. :oops:

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Облегченные потоки VB 2008

Сообщение ANDLL » 02.05.2009 (Сб) 18:16

Thread переводится как "нить", так что твоя игра слов вводит в некоторое недопонимание.
Покажи что ты хочешь на каком нибудь другом языке, или подбери правильную терминологию
И еще, если нитей в VB нет, то может кто-нибудь знает каким способом достигается максимально возможная производительность при применении обычных потоков
Производительность делается путем понимания механизма потоков и не вставляние палок ему в колеса, оператора "ускорить все" в VB не ввели
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

felix
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 02.05.2009 (Сб) 14:34

Re: Облегченные потоки VB 2008

Сообщение felix » 02.05.2009 (Сб) 19:20

Чую, если об этих потоках никто не знает, наверное их и нет или они какие-нибудь "куцые", с большими ограничениями. Мне нужно чтобы программа ела как можно меньше ресурсов и было многопоточным, а эти "нити" мне может и не нужны, я не знаю. Где-то я увидел, что они будут потреблять меньше ресурсов и подумал, что это не будет лишним в моем приложении, а ничего конкретного в VB найти не смог. Мое приложение будет использовать ~100 потоков и вот не знаю будут ли проблемы со скоростью или нет, как посоветуете так и сделаю.

Покажи что ты хочешь на каком нибудь другом языке, или подбери правильную терминологию


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

Производительность делается путем понимания механизма потоков и не вставляние палок ему в колеса


Да, это понятно, я имел ввиду, чтобы не было каких-нибудь "надстроек", "оберток" и т.п. в классах многопоточности, которые может и будут что-то упрощать, но при этом еще и сильно замедлят выполнение. Может посоветуете какие-нибудь примеры именно правильного и шустрого использования потоков?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Облегченные потоки VB 2008

Сообщение iGrok » 02.05.2009 (Сб) 19:31

felix писал(а):...Я делал потоки на перле, там они в windows, насколько я знаю, как раз только "облегченные"...

Можешь привести пример хотя бы на том же перле?
Потому что пока фраза "облегчённый поток" не говорит вообще ни о чём.

Есть потоки, они же нити, они же "threads". Есть фиберы, они же "fiber". Про последние, в принципе, в en.wiki написано
... a fiber is a particularly lightweight thread of execution.

Ты их что ли имеешь в виду?
label:
cli
jmp label

felix
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 02.05.2009 (Сб) 14:34

Re: Облегченные потоки VB 2008

Сообщение felix » 02.05.2009 (Сб) 20:09

Можешь привести пример хотя бы на том же перле?


Потоки в Perl реализованы через подключаемые модули. Не вижу особого смысла, но все же:

Код: Выделить всё
use threads;#Подключается модуль потоков
use threads::shared;#Подключается модуль для разделяемых ресурсов
my $p = 1;#Обычная переменная - ее копия будет в каждом потоке
my $s : shared = 2;#Разделяемая переменная - она будет одна для всех потоков
my $potok1 = threads->create(\&potok);#Запускается 1 поток
my $potok2 = threads->create(\&potok);#Запускается 2 поток
$potok1->join();#Присоединяется запущенный поток
$potok2->join();#Присоединяется запущенный поток
sub potok{#Подпрограмма потока
#Здесь действия в потоке
{
      lock $s;#Например, блокируется разделяемая переменная до конца текущего блока { }, остальные потоки дойдя до сюда ждут, по выходу из блока она разблокируется
      #Здесь действия в потоке
  }
#Здесь действия в потоке
}


Если имелась ввиду реализация этих модулей, то я конечно ее не знаю, а кроме того там часто используются скомпилированные файлы.

Ты их что ли имеешь в виду?


По-всей видимости, да, хотя слово "fiber" раньше не встречал. Но повторюсь, может они и не нужны, может хватит и обычных, прошу совета.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Облегченные потоки VB 2008

Сообщение ANDLL » 02.05.2009 (Сб) 20:23

Приведенный тобой пример - это самые обычные потоки, а никакие не фиберы
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

felix
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 02.05.2009 (Сб) 14:34

Re: Облегченные потоки VB 2008

Сообщение felix » 02.05.2009 (Сб) 20:31

Я не знаю, может и так, хотя где-то в Perl все-равно упоминалось про "облегченные", оттуда я это и взял. :)

felix
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 02.05.2009 (Сб) 14:34

Re: Облегченные потоки VB 2008

Сообщение felix » 02.05.2009 (Сб) 20:59

Во, сразу нашел на одном из форумов (https://www.hack-info.ru/showthread.php?t=36959) про потоки в Perl:
Лирическое отступление: Когда я тестил этот скрипт, то создание потоков решил пронаблюдать простым способом: найти в Process Explorer от Sisinternals perl.exe и пронаблюдать как он прекрасно создает мои потоки. Но потоков я так и не увидел. Приложение отработало, данные были получены - а потоков не было. Т.е. таких нормальных "классических" потоков, которые прекрасно видно в тех же Delphi при экспериментах с TThread. Более того, threads->self()->tid(), которая возвращает идентификатор потока, показывала красивые целые номера: 0,1,2... n для каждого потока. Речь сейчас идёт, разумеется, о Win32... И в рамках этой платформы, корректнее, наверное, использовать термин "нить", а не "поток". Их часто путают при переводе или считают синонимами, но в Windows это не синонимы: есть поток Thread, и есть нить - Fiber. Последнее, также иногда называют облегченным потоком. Это как бы "поток в потоке". Мы по прежнему зависим от планировщика Windows при "дележе" ресурсов, но переключаться между нитями мы можем так, как нам этого хочется, а не как того желает система. Но раз уж в описаниях используется слово thread - поток, то пусть так и останется.

Так, что, видимо все-таки там потоки это фиберы :)

И все-таки, можно какие-нибудь советы по тому что стоит, а что не надо использовать для многопоточности в VB

euroflock
Обычный пользователь
Обычный пользователь
 
Сообщения: 68
Зарегистрирован: 26.02.2009 (Чт) 12:54

Re: Облегченные потоки VB 2008

Сообщение euroflock » 02.05.2009 (Сб) 21:11

felix писал(а):Подскажите есть ли в Visual Basic 2008 облегченные потоки (не просто потоки windows, а именно "нити")? Ато я что-то не смог найти ничего о них. Если есть, то покажите, пожалуйста, как ими пользоваться. Я только начинаю изучать Visual Basic, поэтому почти ничего по теме не знаю. :oops:


Здесь доступное введение в тему организации многопоточного приложения, запуска потоков с передачей параметров для внутрипоточной процедуры, а также способа ожидания завершения всех потоков: http://bbs.vbstreets.ru/viewtopic.php?f=2&t=39372

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Облегченные потоки VB 2008

Сообщение ANDLL » 02.05.2009 (Сб) 21:21

И в рамках этой платформы, корректнее, наверное, использовать термин "нить", а не "поток". Их часто путают при переводе или считают синонимами, но в Windows это не синонимы: есть поток Thread, и есть нить - Fiber.
Еще раз. С английского thread переводится как нить, fiber как волокно. Автору следовало сверится со словарем.
Thread и fiber - весьма разные вещи. В перле по всей видимости просто ручное управление переключение потоков, что видимо и привело к тому что число системных нитей не растет, и столь сильно возбудило воображение автора отрывка.
Для потоков в Vb нужно использовать класс Thread. Это ответ на вопрос?
И не в коем случае не делать так как делает euroflock в своем примере - жрущий весь процессор(и перемежанный невтемным DoEvents) цикл "все потоки завершены" повергает людей образованных в ужас
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Облегченные потоки VB 2008

Сообщение ANDLL » 02.05.2009 (Сб) 21:22

Вообще кажеться более менее рабочий вариант сопрограмм, который мне удавалось сделать тут - viewtopic.php?f=9&t=34267
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

felix
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 02.05.2009 (Сб) 14:34

Re: Облегченные потоки VB 2008

Сообщение felix » 02.05.2009 (Сб) 21:41

Спасибо, буду разбираться в примерах.

felix
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 02.05.2009 (Сб) 14:34

Re: Облегченные потоки VB 2008

Сообщение felix » 03.05.2009 (Вс) 9:06

А вот класс BackgroundWorker хуже Thread?
Еще никак не пойму что считается общим для разных потоков, а что своим, чем это настраивается? Объясните, пожалуйста, в двух словах или укажите где об этом понятно написано.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Облегченные потоки VB 2008

Сообщение ANDLL » 03.05.2009 (Вс) 18:34

Свои - локальные переменные в функции.
Общее - все остальное.
Ну еще члены классов помеченные атрибутом threadstatic содержат свои значения для каждого потока.
BackgroundWorker это обертка на Thread, лучше или нет решать тебе.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

feliks
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 03.05.2009 (Вс) 20:02

Re: Облегченные потоки VB 2008

Сообщение feliks » 03.05.2009 (Вс) 20:11

Теперь все понятно, спасибо

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Облегченные потоки VB 2008

Сообщение Williams » 04.05.2009 (Пн) 13:25

Я бы добавил, что воркер удобен для базовых случаев, но предоставляет весьма ограниченный контроль.
И вы думаете, что вас оставят в живых после прочтения этого поста?


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 22

    TopList