为什么更多的线程会使性能恶化?

时间:2017-09-15 14:41:39

标签: multithreading python-2.7 performance primes timeit

以下代码从用户获取2个数字,并计算这些数字之间有多少素数。 在没有线程的情况下运行代码(1到1000000之间)让我获得2.8秒并且有2个线程(我的CPU有2个核心)我得到了4.8秒。 它是PC的问题,代码。 如果您可以尝试在PC上运行并分享结果,我会感谢您的。 如果您发现代码存在问题或者想知道为什么会发生这种情况,请分享您的难度。

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)

0 个答案:

没有答案