Init
This commit is contained in:
commit
c394677d07
59 files changed
+5149
No files matched your search
@@ -0,0 +1,44 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Демо: потоки выполняются конкурентно — sleep не складывается.
|
||||
|
||||
Запуск из корня курса:
|
||||
python lab02_threads/examples/01_threads_sleep_demo.py
|
||||
|
||||
Пять потоков спят по 0.4 c. Сумма времён = 2 c, реальное время ≈ 0.4 c:
|
||||
пока один поток спит, процессор обслуживает другие.
|
||||
"""
|
||||
import threading
|
||||
import time
|
||||
|
||||
N_THREADS = 5
|
||||
SLEEP = 0.4
|
||||
|
||||
|
||||
def worker(idx: int) -> None:
|
||||
name = threading.current_thread().name
|
||||
t0 = time.perf_counter()
|
||||
time.sleep(SLEEP) # «ожидание сети/диска»
|
||||
dt = time.perf_counter() - t0
|
||||
print(f" {name}: {dt:.3f} c")
|
||||
|
||||
|
||||
def main():
|
||||
print(f"Запускаем {N_THREADS} потоков, каждый спит {SLEEP} c")
|
||||
|
||||
threads = [threading.Thread(target=worker, args=(i,), name=f"поток-{i}")
|
||||
for i in range(N_THREADS)]
|
||||
|
||||
t0 = time.perf_counter()
|
||||
for t in threads:
|
||||
t.start() # ВСЕ стартуют первыми...
|
||||
for t in threads:
|
||||
t.join() # ...потом ВСЕ ждём (start и join не перемешивать!)
|
||||
total = time.perf_counter() - t0
|
||||
|
||||
print(f"Суммарно: {total:.3f} c "
|
||||
f"(сумма времён была бы {N_THREADS * SLEEP:.1f} c)")
|
||||
print(f"Ускорение: x{N_THREADS * SLEEP / total:.1f} — так работает I/O-параллелизм")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in new issue
Block a user