Почему больше ниток ухудшает производительность?
Следующий код получает 2 числа от пользователя и вычисляет, сколько простых чисел существует между этими числами. Выполнение кода (от 1 до 1000000) без потоков дало мне 2,8 секунды, а с двумя потоками (у моего процессора 2 ядра) - 4,8 секунды. Это проблема с ПК, код. Если бы вы могли попробовать запустить его на своем ПК и поделиться результатами, я бы поблагодарил вас за это. Если вы видите проблему с кодом или знаете, почему это происходит, поделитесь своими соображениями.
import math
from threading import Thread
from timeit import timeit
first_num = input()
last_num = input()
primes = []
def is_prime(num):
if num == 2:
return True
if num == 1 or num % 2 == 0:
return False
for i in xrange(3, int(math.sqrt(num)) + 1, 2):
if (num % i == 0):
return False
return True
def find_primes(numbers):
for num in numbers:
if is_prime(num):
primes.append(num)
def targil_a():
find_primes(xrange(first_num, last_num))
print len(primes)
def targil_b():
numbers = range(first_num, last_num)
threads = []
for i in xrange(2):
part_len = int(len(numbers)/2)
t = Thread(target=find_primes, args=(numbers[part_len*i: part_len*(i+1) + 1],))
t.start()
threads.append(t)
for trd in threads:
trd.join()
print len(primes)
print timeit(targil_a, number=1)
primes = []
print timeit(targil_b, number=1)