Създайте многонишкова програма за прочитането на резултатите от гласуване за парламент от файл, представляващ единствен ресурс и сумирането на резултатите от него. Резултатите от извършването на сумирането от всяка отделна нишка трябва да бъдат също сумирани и изведени, след като всяка от нишките е завършила изпълнението си.
Програмата извежда броя на гласовете за всяка партия (по име) и използва Бариера поради конкурентното четене на файла/овете и обработката на резултата от нишките.
concurrent-votes-counter.src
|
+ - main
|
+ - java.com.pp.concurrentVotesCounter
| |
| + - threads
| | |
| | + - CountingThread.java (Държанието на паралелна нишка)
| |
| + - util
| | |
| | + - CsVFileReader.java (Файл за четене на csv файлове)
| |
| + - ConcurrentVotesCounterApplication.java (Начално място на програмата
| и държанието на резултатната нишка от бариерата)
+ - resources
|
+ - cik_parties_02.10.2022.csv (Файл с информация за партиите)
|
+ - votes_02.10.2022.csv (Файл с данни от гласуванията през 02.10.2022г.)
-
cik_parties_02.10.2022.csv
- Всеки ред от файла представя една партия/коалиция, регистрирана в ЦИК, като разделителят между полетата е ;
- Полета:
- Номер
- Име
- Полета:
- Всеки ред от файла представя една партия/коалиция, регистрирана в ЦИК, като разделителят между полетата е ;
-
votes_02.10.2022.csv
- Всеки ред от файла представя действителните гласове от един секционен протокол, като разделителят между полетата е ;
- Полета:
- Нечетни : Номер на партия
- Четни : Брой гласове
- Полета:
- Всеки ред от файла представя действителните гласове от един секционен протокол, като разделителят между полетата е ;
Тестовете са на различен брой нишки като са проведени 5 пъти за всеки брой.
-
С 1 нишка:
- 245 ms
- 272 ms
- 259 ms
- 262 ms
- 251 ms
- Средно : 257,80 ms
-
С 2 нишки:
- 253 ms
- 280 ms
- 251 ms
- 275 ms
- 288 ms
- Средно : 269,40 ms
-
С 3 нишки:
- 318 ms
- 276 ms
- 245 ms
- 324 ms
- 248 ms
- Средно : 282,20 ms
-
С 4 нишки:
- 256 ms
- 250 ms
- 247 ms
- 278 ms
- 251 ms
- Средно : 256,40 ms
-
С 8 нишки:
- 258 ms
- 270 ms
- 265 ms
- 257 ms
- 262 ms
- Средно : 262,40 ms
-
С 16 нишки:
- 257 ms
- 301 ms
- 252 ms
- 268 ms
- 262 ms
- Средно : 268,00 ms
Използваният файл има 12 000 реда и е прекалено малък, следователно по-малко нишки се справят по-добре от повече.