Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions .idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/inspectionProfiles/profiles_settings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/multi-task-at-18.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 25 additions & 0 deletions CPU-Bound.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from hashlib import md5
from random import choice
import concurrent.futures
import time


def miner(n):
while True:
s = "".join([choice("0123456789") for i in range(50)])
h = md5(s.encode('utf8')).hexdigest()
if h.endswith("00000"):
return s + ' ' + h


def main():
with concurrent.futures.ProcessPoolExecutor(max_workers=61) as executor:
for chain in zip(executor.map(miner, range(4))):
print(chain)


if __name__ == '__main__':
start_time = time.time()
main()
end_time = time.time()
print(end_time - start_time)
25 changes: 25 additions & 0 deletions IO-Bound.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from urllib.request import Request, urlopen
import concurrent.futures


urls = open('res.txt', encoding='utf8').read().split('\n')


def viewer(url):
try:
request = Request(
url,
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 9.0; Win65; x64; rv:97.0) Gecko/20105107 Firefox/92.0'},
)
resp = urlopen(request, timeout=5)
code = resp.code
print(code)
resp.close()
except Exception as e:
print(url, e)


with concurrent.futures.ThreadPoolExecutor(max_workers=100) as executor:
future_to_url = {executor.submit(viewer, url=url): url for url in urls}
for future in concurrent.futures.as_completed(future_to_url):
future.result(60)
66 changes: 66 additions & 0 deletions REPORT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Работа с IO-Bound

Время работы синхронной проверки ссылок:

![1поток](https://github.com/Roggi7/multi-task-at-18/blob/main/потоки/1%20поток.png)
![1поток2](https://github.com/Roggi7/multi-task-at-18/blob/main/потоки/нагрузка.%201%20поток.png)

Время работы + нагрузка при параллельной работе на 5 потоков:

![5поток](https://github.com/Roggi7/multi-task-at-18/blob/main/потоки/5%20потоков.png)
![5поток2](https://github.com/Roggi7/multi-task-at-18/blob/main/потоки/нагрузка.%205%20потоков.png)

Время работы + нагрузка при параллельной работе на 10 потоков:

![10поток](https://github.com/Roggi7/multi-task-at-18/blob/main/потоки/10%20потоков.png)
![10поток2](https://github.com/Roggi7/multi-task-at-18/blob/main/потоки/нагрузка.%2010%20потоков.png)

Время работы + нагрузка при параллельной работе на 100 потоков:

![100поток](https://github.com/Roggi7/multi-task-at-18/blob/main/потоки/100%20потоков.png)
![100поток2](https://github.com/Roggi7/multi-task-at-18/blob/main/потоки/нагрузка.%20100%20потоков.png)

Можно заметить: с увеличением кол-ва воркеров уменьшается время работы и нагрузка с процессора. Однако при 100 воркерах
нагрузка снова повышается.



# CPU-Bound

Время выполнения и нагрузка на процессор при работе на 1 ядре:

![1cpu](https://github.com/Roggi7/multi-task-at-18/blob/main/процессы/1%20процесс%202.png)
![1cpu2](https://github.com/Roggi7/multi-task-at-18/blob/main/процессы/нагрузка.%201%20процесс.png)

Время выполнения и нагрузка на процессор при работе на 2 воркерах:

![2cpu](https://github.com/Roggi7/multi-task-at-18/blob/main/процессы/2%20процесса.png)
![2cpu2](https://github.com/Roggi7/multi-task-at-18/blob/main/процессы/нагрузка.%202%20процесса.png)

Время выполнения и нагрузка на процессор при работе на 4 воркерах:

![3cpu](https://github.com/Roggi7/multi-task-at-18/blob/main/процессы/4%20процесса.png)
![3cpu2](https://github.com/Roggi7/multi-task-at-18/blob/main/процессы/нагрузка.%204%20процесса.png)

Время выполнения и нагрузка на процессор при работе на 10 воркерах:

![4cpu](https://github.com/Roggi7/multi-task-at-18/blob/main/процессы/10%20процессов.png)
![4cpu2](https://github.com/Roggi7/multi-task-at-18/blob/main/процессы/нагрузка.%2010%20процессов.png)

Время выполнения и нагрузка на процессор при работе на 61 воркере:

![5cpu](https://github.com/Roggi7/multi-task-at-18/blob/main/процессы/61%20процесс.png)
![5cpu2](https://github.com/Roggi7/multi-task-at-18/blob/main/процессы/нагрузка.%2061%20процесс.png)

Время выполнения и нагрузка на процессор при работе на 100 воркерах:

![6cpu](https://github.com/Roggi7/multi-task-at-18/blob/main/процессы/100%20процессов.png)


Как можно заметить количество воркеров уменьшает время выполнения, однако сильнее нагружает процессор, но почему-то не
до 100%. Так же при 100 воркерах срабатывает ошибка по максимальному количеству процессов. Так же стоит отметить, что
иногда время выполнения зависит от рандомной генерации, и при 1 ядре код может завершать свою работу за меньшее кол-во
времени.



Loading