1
2
3
4
5
6
7
8
9
|
即GLI是以CPU核心为单位来控制全局锁,所以是不能跨不同的CPU(核心 )的
GLI可以保证同一个进程中,某一个线程的共享数据在某一时刻只能同时被另外一个线程修改(使用),
而不能同时被多个线程修改(使用),如果去掉GLI,则需要自己为线程加锁,这样之后,性能比原来还要差。
当然,难道就不能充分利用多核CPU或多个CPU了?
做成多进程就可以了,不同的进程运行在不同的CPU(核心)上,也可以实现并发,
只是这样的话就会比较浪费内存空间,考虑同时运行
10
个QQ程序的情况,
假如
1
个QQ占用500M的内存空间,则
10
个QQ就要占用5G的内存空间了。但如果是多线程的话,
可能
10
个QQ还是共享着这500M的内存空间。还有一个缺点就是,多进程间的数据直接访问可能
会比较麻烦,但其实也是可以实现的,比如chrome浏览器就是用多进程实现的。
|
1
2
3
4
5
6
7
8
9
10
|
import
threading #Python多线程模块
import
time
def run(num):
print
'Hi, I am thread %s..lalala'
% num
time.sleep(
1
)
for
i
in
range(
20
):
t = threading.Thread(target=run, args=(i,)) #多线程使用方法,target为需要执行多线程的函数,args为函数中的参数,注意这里的参数写成(i,),即如果只能一个参数,也要加上一个
","
t.start() #开始执行多线程
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
xpleaf@xpleaf-machine:/mnt/hgfs/Python/day6$ python thread4.py
Hi, I am thread
0
..lalala
Hi, I am thread
1
..lalala
Hi, I am thread
2
..lalala
Hi, I am thread
3
..lalala
Hi, I am thread
4
..lalala
Hi, I am thread
5
..lalala
Hi, I am thread
6
..lalala
Hi, I am thread
7
..lalala
Hi, I am thread
8
..lalala
Hi, I am thread
9
..lalala
Hi, I am thread
10
..lalala
Hi, I am thread
11
..lalala
Hi, I am thread
12
..lalala
Hi, I am thread
13
..lalala
Hi, I am thread
14
..lalala
Hi, I am thread
15
..lalala
Hi, I am thread
16
..lalala
Hi, I am thread
17
..lalala
Hi, I am thread
18
..lalala
Hi, I am thread
19
..lalala
|
1
2
3
4
5
6
7
8
9
10
11
|
import
threading
import
time
def run(num):
print
'Hi, I am thread %s..lalala'
% num
time.sleep(
1
)
for
i
in
range(
20
):
t = threading.Thread(target=run, args=(i,))
t.start()
t.join() #等上一个线程执行完后再执行下一个线程
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
xpleaf@xpleaf-machine:/mnt/hgfs/Python/day6$ python thread4.py
Hi, I am thread
0
..lalala
Hi, I am thread
1
..lalala
Hi, I am thread
2
..lalala
Hi, I am thread
3
..lalala
Hi, I am thread
4
..lalala
Hi, I am thread
5
..lalala
Hi, I am thread
6
..lalala
Hi, I am thread
7
..lalala
Hi, I am thread
8
..lalala
Hi, I am thread
9
..lalala
Hi, I am thread
10
..lalala
Hi, I am thread
11
..lalala
Hi, I am thread
12
..lalala
Hi, I am thread
13
..lalala
Hi, I am thread
14
..lalala
Hi, I am thread
15
..lalala
Hi, I am thread
16
..lalala
Hi, I am thread
17
..lalala
Hi, I am thread
18
..lalala
Hi, I am thread
19
..lalala
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import
threading,time
class
MyThread(threading.Thread):
def __init__(self, num):
threading.Thread.__init__(self)
self.num = num
def run(self): #
this
name must be
'run'
print
'I am thread %s'
% self.num
time.sleep(
2
)
for
i
in
range(
20
):
t = MyThread(i)
t.start()
|