Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
5 / 5 / 1
Регистрация: 17.10.2016
Сообщений: 172

Server socket как ограничить число потоков

24.05.2017, 10:34. Показов 1998. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Есть server socket, который ожидает подключение клиентов. Для каждого клиента создается свой поток.
Java
1
2
3
4
5
6
7
8
                      s = new ServerSocket(serv_port);
                                incoming = s.accept();
                                Runnable r = new ThreadedServerLaunch(incoming);
                                Thread t = new Thread(r);
                                t.start();
                                sock = i;
                                i++;
                                System.out.println("SERVER THREAD " + i);
И вот если создать очень много подключений приложение начинает подвисать и загрузка процессора возрастает.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
"Binder_1"@21*337 in group "main": RUNNING
        "Binder_2"@21*339 in group "main": RUNNING
        "Binder_3"@21*298 in group "main": RUNNING
        "FinalizerDaemon"@21*342: WAIT
        "FinalizerWatchdogDaemon"@21*343: WAIT
        "GCDaemon"@21*341: WAIT
        "HeapTrimmerDaemon"@21*340: WAIT
        "hwuiTask1"@21*237 in group "main": RUNNING
        "hwuiTask2"@21*236 in group "main": RUNNING
        "main"@21*143 in group "main": RUNNING
        "pool-2-thread-1"@21*299 in group "main": WAIT
        "ReferenceQueueDaemon"@21*338: WAIT
        "RenderThread"@21*230 in group "main": RUNNING
        "Signal Catcher"@21*336: WAIT
        "SoundPool"@21*345 in group "main": RUNNING
        "SoundPoolThread"@21*346 in group "main": RUNNING
        "Thread-4628"@21*344 in group "main": RUNNING
        "Thread-4631"@21*240 in group "main": RUNNING
        "Thread-4632"@21*244 in group "main": SLEEPING
        "Thread-4633"@21*347 in group "main": SLEEPING
        "Thread-4645"@21*243 in group "main": SLEEPING
        "Thread-4649"@21*301 in group "main": SLEEPING
        "Thread-4651"@21*303 in group "main": SLEEPING
        "Thread-4653"@21*305 in group "main": SLEEPING
        "Thread-4655"@21*307 in group "main": SLEEPING
        "Thread-4657"@21*309 in group "main": SLEEPING
        "Thread-4659"@21*311 in group "main": SLEEPING
        "Thread-4661"@21*313 in group "main": SLEEPING
        "Thread-4663"@21*315 in group "main": SLEEPING
        "Thread-4665"@21*317 in group "main": SLEEPING
        "Thread-4667"@21*319 in group "main": SLEEPING
        "Thread-4669"@21*321 in group "main": SLEEPING
        "Thread-4671"@21*323 in group "main": SLEEPING
        "Thread-4673"@21*325 in group "main": SLEEPING
        "Thread-4675"@21*327 in group "main": SLEEPING
        "Thread-4677"@21*329 in group "main": SLEEPING
        "Thread-4679"@21*331 in group "main": SLEEPING
        "Thread-4681"@21*333 in group "main": SLEEPING
        "Thread-4683"@21*335 in group "main": SLEEPING
        "Thread-4685"@21*350 in group "main": SLEEPING
        "Thread-4687"@21*352 in group "main": SLEEPING
        "Thread-4689"@21*354 in group "main": SLEEPING
        "Thread-4691"@21*356 in group "main": SLEEPING
        "Thread-4693"@21*358 in group "main": SLEEPING
        "Thread-4695"@21*360 in group "main": SLEEPING
        "Thread-4697"@21*362 in group "main": SLEEPING
        "Thread-4699"@21*364 in group "main": SLEEPING
        "Thread-4701"@21*366 in group "main": SLEEPING
        "Thread-4703"@21*368 in group "main": SLEEPING
        "Timer-0"@21*223 in group "main": WAIT
        "Timer-1"@21*221 in group "main": WAIT
        "WifiManager"@21*239 in group "main": RUNNING
Подскажите как завершать, либо ограничить количество потоков которые уже не используются?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.05.2017, 10:34
Ответы с готовыми решениями:

Ограничить число потоков
Приветствую. У меня проблема.. Нужно как-нибудь ограничить число создаваемых в цикле параллельных потоков... Функция, в которой...

Ограничить число потоков в QTcpServer-e
С ходу не смог найти как можно ограничить кол-во потоков на подключенных к серверу сокетах, по умолчанию сервер на каждый сокет выделит по...

Nodejs net socket server and android socket client
Добрый день Форумчане нужно помощь гуру! Решил с другом написать сервер на ноде с использование сокетов и андроид клиент отправки сокет. Но...

9
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,457
24.05.2017, 10:46
Arion32, а почему у вас эти потоки не убитые если они уже не нужны?
0
5 / 5 / 1
Регистрация: 17.10.2016
Сообщений: 172
24.05.2017, 10:58  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
почему у вас эти потоки не убитые если они уже не нужны?
вот и спрашиваю... что с ними сделать чтобы их не было и они не грузили систему.
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,457
24.05.2017, 11:06
Arion32, если вы уйдете из run после передачи то их не будет
0
5 / 5 / 1
Регистрация: 17.10.2016
Сообщений: 172
24.05.2017, 11:12  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
если вы уйдете из run после передачи то их не будет
подскажите как это сделать? не совсем понял вас.
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,457
24.05.2017, 11:16
Arion32, покажите тело вашего потока и я подскажу как это сделать
0
5 / 5 / 1
Регистрация: 17.10.2016
Сообщений: 172
24.05.2017, 11:30  [ТС]
vxg,
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
class ThreadedServerLaunch implements Runnable {
 
        public Socket incoming;
        Thread recipeDownloadThread;
        public String line;
        public String feedLine;
        public PrintWriter out;
        public Scanner in;
        public Thread ServWeight;
        public boolean boolWeight;
        public boolean recipeDownload;
 
 
        public ThreadedServerLaunch(Socket i) {
 
            incoming = i;
        }
 
        public ThreadedServerLaunch(Thread i) {
            ServWeight = i;
            recipeDownloadThread = i;
        }
 
 
        public ThreadedServerLaunch(boolean i) {
            boolWeight = i;
            recipeDownload = i;
        }
 
        @Override
        public void run() {
 
            try {
                try {
 
 
                    int mySock;
                    mySock = sock;
                    InputStream inStream = incoming.getInputStream(); // ввод
                    OutputStream outStream = incoming.getOutputStream(); // вывод
 
                    in = new Scanner(inStream);
                    out = new PrintWriter(outStream, true);
 
                    out.println("Welcome!");
 
                    done = false;
//
                    ServWeight = new Thread(new Runnable() {
                        @Override
                        public void run() {
 
                            for (; ; ) {
                                try {
                                    Thread.sleep(98);
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                                while (boolWeight == true) {
 
                                    try {
                                        Thread.sleep(99);
                                    } catch (InterruptedException e) {
                                        e.printStackTrace();
                                    }
                                    AppPref = getSharedPreferences("AppData", MODE_PRIVATE);
 
                                    int stmm = AppPref.getInt("stm", 0);
                                    if (stmm == 16) {
 
                                        out.println("3");
 
 
                                    }
 
                                    if ((stmm > 4 && stmm < 9) | (stmm == 1 )) {
 
 
                                            out.println("2");
//                                
 
 
 
 
 
                                    } else {
 
                                        out.println("1");
 
                                    }
 
 
 
                                }
 
                            }
                        }
                    });
                    ServWeight.start();
вроде оно
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,457
24.05.2017, 11:37
Лучший ответ Сообщение было отмечено Arion32 как решение

Решение

Arion32, вы никогда не выходите из цикла - сделайте с этим что нибудь. это ведь ненормально - если передача завершена или возникла критическая ошибка или поток прерывают - сделайте break, выйдите из цикла и соответственно из run
1
5 / 5 / 1
Регистрация: 17.10.2016
Сообщений: 172
24.05.2017, 12:20  [ТС]
vxg, Спасибо break помог) теперь все гуд).
0
90 / 89 / 23
Регистрация: 08.07.2014
Сообщений: 548
24.05.2017, 13:41
Arion32, про ExecutorService почитайте.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.05.2017, 13:41
Помогаю со студенческими работами здесь

Socket Android Client and Java Socket Server
Доброго времени суток.Пытаюсь сделать простое клиент-серверное приложение. Клиент - приложение на Android устройстве. Сервер - Приложение...

Windows socket server python + socket client js
Здравствуйте пытаюсь решить такую задачу, на веб странице реализовал soket клиент на js, и socket server, сокет сервер получает данные от...

Server Socket, Asynchronous socket error 10053
Всем привет. Сразу к делу. Работаю с компонентом ServerSocket, при приеме данных возникает asynchronous socket error 10053. Сервер...

Как ограничить траффик с помощью Windows Server 2008 R2 и Trafic Inspector
Здравствуйте! Я раньше с серверами не работал. короче вообще ноль ничего не знаю. есть группы компьютеров -1 группа 15 пк -2...

Возможно ли ограничить запуск потоков
Добрый день. Подскажите, есть несколько потоков MyThread, которые запускаются горячей кнопкой, останавливаются другой. Как сделать чтобы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru