Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Самой просто метод реализации многопоточности

-

Вопросы и ответы, обсуждения

- Ваши вопросы по C# только в данном разделе

Ответ
 
Опции темы
Старый 11.03.2013, 00:57   #1
Читер-спонсор
 Рыцарь-защитник
Аватар для Nickitee
 
Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(
Регистрация: 28.08.2009
Сообщений: 603
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
 
По умолчанию Самой просто метод реализации многопоточности

Привет, сегодня задумался, как в маленький по объему код, запихнуть многопоточность на примере обычной авторизации.
Итак:
Есть очередь:
Код:
public Queue<string> localBankQueue = new Queue<string>();
Есть некая функция для проверки
Код:
 public string checkAccount(string login, string password)
{
//Возвращаем либо 1 при валидности, 0 при не валидности
}
Функция, которая добавляет в listBox
Код:
               private delegate void AddListBoxItemDelegate(object item);
                private void AddListBoxItem(object item)
                {
                    if (this.listBox1.InvokeRequired)
                    {
                        this.listBox1.Invoke(new AddListBoxItemDelegate(this.AddListBoxItem), item);
                    }
                    else
                    {
                        this.listBox1.Items.Add(item);
                    }
                }
Функция, которая берёт аккаунт из очереди и проверяет его

Код:
                public void one()
                {
                    while (true)
                    {
                        if (localBankQueue.Count != 0)
                        {
                            string item = localBankQueue.Dequeue();
                            AddListBoxItem(checkAccount(item.Split(':')[0], item.Split(':')[1]));
                        }
                        else
                        {
                            Thread.CurrentThread.Abort();
                        }
                    }
                }
Сами потоки
Код:
                Thread[] currentThreads = new Thread[0];
И подошли к эвенту на кнопке, который приводит в действие все потоки
Код:
            for (int x = 0; x < (int)numericUpDown1.Value; x++)
            {
                currentThreads[x] = new Thread(one);
                currentThreads[x].Start();
            }
Для теста мы добавим 1 валидный акк в размере 100 штук

Код:
                    for (int i = 0; i < 100; i++)
                    {
                        localBankQueue.Enqueue("XenWorld:mmkmmk");
                    }
Запускаю 1 поток: всё работает.
Запускаю 5 потоков: работает, но разница еле ощутима.
Запускаю 20 потокв: разницы практически нету.

Где ошибка?

Добавлено через 16 минут
Название темы немного было поковеркано ).
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.

Последний раз редактировалось Nickitee; 11.03.2013 в 01:14. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 11.03.2013, 13:27   #2
 Сержант
Аватар для Yukikaze
 
Yukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядом
Регистрация: 01.10.2011
Сообщений: 128
Популярность: 5723
Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
 
По умолчанию Re: Самой просто метод реализации многопоточности

Цитата:
Сообщение от NickiteeПосмотреть сообщение
Запускаю 20 потокв: разницы практически нету.

ну так процессор же не 20-ядерный.
Процессор сам по себе имеет один поток на ядро, грубо говоря. Многопоточность обеспечивается частым переключением от одной задачи к другой, причем операция переключения достаточно ресурсоемкая, следовательно если пытаться запустить больше потоков чем (кол-во ядер*2) то мы начинаем терять производительность на постоянном переключении контекста.
________________
Talk is cheap. Show me the code
— Linus Torvalds
  Ответить с цитированием
Старый 11.03.2013, 14:05   #3
 Старший сержант
Аватар для Sinyss
 
Sinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака Норриса
Регистрация: 29.07.2011
Сообщений: 197
Популярность: 8989
Сказал(а) спасибо: 45
Поблагодарили 175 раз(а) в 139 сообщениях
Отправить сообщение для Sinyss с помощью Skype™
 
По умолчанию Re: Самой просто метод реализации многопоточности

Так в любом компе в каждый момент времени крутится пара сотен задач....
  Ответить с цитированием
Старый 11.03.2013, 15:50   #4
Читер-спонсор
 Рыцарь-защитник
Аватар для Nickitee
 
Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(
Регистрация: 28.08.2009
Сообщений: 603
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
 
По умолчанию Re: Самой просто метод реализации многопоточности

Цитата:
Сообщение от SinyssПосмотреть сообщение
Так в любом компе в каждый момент времени крутится пара сотен задач....

Прям мои мысли читаешь ).

Люди которые пишут бруты/чекеры etc... дают гарантию работоспособности 50-100 потоков.
И что, получается из этих потоков одновременно работают только 8-12?
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.

Последний раз редактировалось Nickitee; 11.03.2013 в 15:55.
  Ответить с цитированием
Старый 11.03.2013, 16:09   #5
 Старший сержант
Аватар для Sinyss
 
Sinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака Норриса
Регистрация: 29.07.2011
Сообщений: 197
Популярность: 8989
Сказал(а) спасибо: 45
Поблагодарили 175 раз(а) в 139 сообщениях
Отправить сообщение для Sinyss с помощью Skype™
 
По умолчанию Re: Самой просто метод реализации многопоточности

Цитата:
Сообщение от NickiteeПосмотреть сообщение
Прям мои мысли читаешь ).

Люди которые пишут бруты/чекеры etc... дают гарантию работоспособности 50-100 потоков.
И что, получается из этих потоков одновременно работают только 8-12?

У сервиса может быть ограничение на количество коннектов с 1го IP. То есть сервер отвечает на первые 8, а остальные висят в T/O... это мне кажется более вероятным...
  Ответить с цитированием
Старый 11.03.2013, 17:15   #6
 Сержант
Аватар для Yukikaze
 
Yukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядом
Регистрация: 01.10.2011
Сообщений: 128
Популярность: 5723
Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
 
По умолчанию Re: Самой просто метод реализации многопоточности

Nickitee, а кто отрицает их работоспособность, просто с каждым потоком соотношение цена/скорость будет расти. С другой стороны, задача то у нас отнюдь не математическая, то есть процессорных расчетов у нас минимум, а вот IO операций выше крыши, банальные запись/чтение памяти при добавлении записи в листБокс вызывают сотни событий, а ведь у нас еще и работа с сокетом идет.
________________
Talk is cheap. Show me the code
— Linus Torvalds
  Ответить с цитированием
Старый 09.04.2013, 00:17   #7
Читер-спонсор
 Рыцарь-защитник
Аватар для Nickitee
 
Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(
Регистрация: 28.08.2009
Сообщений: 603
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
 
По умолчанию Re: Самой просто метод реализации многопоточности

Проблема была решена установкой максимального количества соединений.
(по дефолту было 2)
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
  Ответить с цитированием
Старый 19.07.2013, 07:24   #8
 Разведчик
Аватар для hackerpronet
 
hackerpronet никому не известный тип
Регистрация: 09.03.2013
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Самой просто метод реализации многопоточности

Исходник выложите)
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Статья] Реализация многопоточности Tip.the.besT Pascal/Delphi 39 23.01.2014 16:22
[Куплю] Оплачу за помощь по настройке(реализации) брута rambler kennympei Товары/услуги в Сети 4 28.11.2012 15:37
[Продам] ЗБТ самолётов qzazar1 World of Tanks 3 12.10.2012 14:52
Ищу знающего человека по установке и полной реализации сервера AION InterWar Общение и обсуждение Aion 0 16.12.2010 20:42

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 15:19.

Пишите нам: forum@zhyk.ru
Copyright © 2025 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net